天天看點

Python-OpenCV 處理圖像(八):圖像二值化處理

0x00. 圖像二值化

圖像二值化就是将圖像上的像素點的灰階值設定為0或255,也就是将整個圖像呈現出明顯的黑白效果。

将256個亮度等級的灰階圖像通過适當的門檻值選取而獲得仍然可以反映圖像整體和局部特征的二值化圖像。

圖像的二值化有利于圖像的進一步處理,使圖像變得簡單,而且資料量減小,能凸顯出感興趣的目标的輪廓。

0x01. 圖像二值化處理

在将圖像二值化之前需要将其先灰階化,示例代碼:

import cv2.cv as cv
image = cv.LoadImage('mao.jpg')

new = cv.CreateImage(cv.GetSize(image), image.depth, )
for i in range(image.height):
    for j in range(image.width):
        new[i,j] = max(image[i,j][], image[i,j][], image[i,j][])

cv.Threshold(new, new, , , cv.CV_THRESH_BINARY_INV)
cv.ShowImage('a_window', new)
cv.WaitKey()
           

0x02. cv.Threshold

cv.Threshold(src, dst, threshold, maxValue, thresholdType)

函數 cvThreshold 對單通道數組應用固定門檻值操作。

該函數的典型應用是對灰階圖像進行門檻值操作得到二值圖像。

參數說明:

src:原始數組 (單通道 , -bit of -bit 浮點數)。    
dst:輸出數組,必須與 src 的類型一緻,或者為 -bit。    
threshold:門檻值    
maxValue:使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值。    
threshold_type:門檻值類型    
threshold_type=CV_THRESH_BINARY:
    如果 src(x,y)>threshold ,dst(x,y) = max_value; 否則,dst(x,y)=;    
threshold_type=CV_THRESH_BINARY_INV:
    如果 src(x,y)>threshold,dst(x,y) = ; 否則,dst(x,y) = max_value.    
threshold_type=CV_THRESH_TRUNC:
    如果 src(x,y)>threshold,dst(x,y) = max_value; 否則dst(x,y) = src(x,y).    
threshold_type=CV_THRESH_TOZERO:
    如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否則 dst(x,y) = .       
threshold_type=CV_THRESH_TOZERO_INV:如果 src(x,y)>threshold,dst(x,y) =  ; 否則dst(x,y) = src(x,y).  
           

繼續閱讀