0x00. 影象二值化
影象二值化就是將影象上的畫素點的灰度值設定為0或255,也就是將整個影象呈現出明顯的黑白效果。
將256個亮度等級的灰度影象通過適當的閾值選取而獲得仍然可以反映影象整體和區域性特徵的二值化影象。
影象的二值化有利於影象的進一步處理,使影象變得簡單,而且資料量減小,能凸顯出感興趣的目標的輪廓。
0x01. 影象二值化處理
在將影象二值化之前需要將其先灰度化,示例程式碼:
1 2 3 4 5 6 7 8 9 10 11 |
import cv2.cv as cv image = cv.LoadImage('mao.jpg') new = cv.CreateImage(cv.GetSize(image), image.depth, 1) for i in range(image.height): for j in range(image.width): new[i,j] = max(image[i,j][0], image[i,j][1], image[i,j][2]) cv.Threshold(new, new, 10, 255, cv.CV_THRESH_BINARY_INV) cv.ShowImage('a_window', new) cv.WaitKey(0) |
0x02. cv.Threshold
cv.Threshold(src, dst, threshold, maxValue, thresholdType)
函式 cvThreshold 對單通道陣列應用固定閾值操作。
該函式的典型應用是對灰度影象進行閾值操作得到二值影象。
引數說明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
src:原始陣列 (單通道 , 8-bit of 32-bit 浮點數)。 dst:輸出陣列,必須與 src 的型別一致,或者為 8-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)=0; threshold_type=CV_THRESH_BINARY_INV: 如果 src(x,y)>threshold,dst(x,y) = 0; 否則,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) = 0. threshold_type=CV_THRESH_TOZERO_INV:如果 src(x,y)>threshold,dst(x,y) = 0 ; 否則dst(x,y) = src(x,y). |