您好,登錄后才能下訂單哦!
這篇“OpenCV圖像的二值化怎么實現(xiàn)”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“OpenCV圖像的二值化怎么實現(xiàn)”文章吧。
圖像二值化( Image Binarization)就是將圖像上的像素點的灰度值設置為0或255,也就是將整個圖像呈現(xiàn)出明顯的黑白效果的過程。
import cv2 img = cv2.imread('img/lena.jpg') # 轉為灰度圖 new_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) height, width = new_img.shape[0:2] # 設置閾值 thresh = 60 # 遍歷每一個像素點 for row in range(height): for col in range(width): # 獲取到灰度值 gray = new_img[row, col] # 如果灰度值高于閾值 就等于255最大值 if gray > thresh: new_img[row, col] = 255 # 如果小于閾值,就直接改為0 elif gray < thresh: new_img[row, col] = 0 cv2.imshow('img', new_img) cv2.waitKey()
threshold()方法參數(shù):
圖片矩陣
閾值
圖片中的最大值
二值化的方式
二值化的方式:
THRESH_BINARY | 高于閾值改為255,低于閾值改為0 |
---|---|
THRESH_BINARY_INV | 高于閾值改為0,低于閾值改為255 |
THRESH_TRUNC | 截斷,高于閾值改為閾值,最大值失效 |
THRESH_TOZERO | 高于閾值不改變,低于閾值改為0 |
THRESH_TOZERO_INV | 高于閾值該為0,低于閾值不改變 |
import cv2 img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE) thresh, new_img = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY) print(thresh) cv2.imshow('img', img) cv2.imshow('NEW_IMG', new_img) cv2.waitKey()
使用一個全局值作為閾值。但是在所有情況下這可能都不太好。
如果圖像在不同區(qū)域具有不同的照明條件。
在這種情況下,自適應閾值閾值可以幫助。這里,算法基于其周圍的小區(qū)域確定像素的閾值。
因此,我們?yōu)橥粓D像的不同區(qū)域獲得不同的閾值,這為具有不同照明的圖像提供了更好的結果。
adaptlive()方法參數(shù):
1.圖片矩陣
2.圖片灰度最大值
3.計算閾值的方法
4.閾值類型
5.處理塊大小
6.算法所用的常量C
cv2.ADAPTIVE_THRESH_MEAN_C
:該閾值是該附近區(qū)域減去恒定的平均Ç。
cv2.ADAPTIVE_THRESH_GAUSSIAN_C
:閾值是鄰域值減去常數(shù)C的高斯加權和。
import cv2 img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE) thresh_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5) cv2.imshow('thresh_img', thresh_img) cv2.waitKey()
圖像分割中閾值選取的最佳算法
threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
import cv2 img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE) # 使用255的閾值進行二值化 ret, thresh_img = cv2.threshold(img, 255, 255, cv2.THRESH_BINARY) cv2.imshow('normal', thresh_img) # 使用高斯濾波模糊圖像 參數(shù)1: 圖片矩陣 參數(shù)2:卷積核 參數(shù)3: 越大越模糊 gaussian_img = cv2.GaussianBlur(img, (5, 5), 0) cv2.imshow('gaussian_img', gaussian_img) # 使用大津算法0閾值二值化經(jīng)過高斯濾波模糊后的圖像 ret, thresh_img = cv2.threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) cv2.imshow('otsu', thresh_img) cv2.imshow('img', img) cv2.waitKey()
以上就是關于“OpenCV圖像的二值化怎么實現(xiàn)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關的知識內(nèi)容,請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。