這一篇主要有兩點:普通閾值化和自適應閾值化。
1、普通閾值化
普通閾值化用到的函數是cv2.threshold,其函數原型爲:
threshold(src, thresh, maxval, type, dst = None)
其中,type的取值有以下幾種cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV、cv2.THRESH_TRUNC、cv2.THRESH_TOZERO、cv2.THRESH_TOZERO_INV,其效果如下:
2、自適應閾值化
自適應閾值化的函數原型爲:
adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst = None)
其中adaptiveMethod的取值爲cv2.ADPTIVE_THRESH_MEAN_C:閾值取自相鄰區域的平均值和cv2.ADPTIVE_THRESH_GAUSSIAN_C:閾值取值相鄰區域的加權和,權重爲一個高斯窗口;blockSize是領域的大小;C是一個常數,閾值就等於的平均值或者加權平均值減去這個常數。
src = cv2.imread('lena.bmp', 0)
src1 = cv2.imread('lena.bmp', 0)
cv2.adaptiveThreshold(src, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2, src)
cv2.imshow('ADAPTIVE_THRESH_MEAN_C', src)
cv2.adaptiveThreshold(src1, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2, src1)
cv2.imshow('ADAPTIVE_THRESH_GAUSSIAN_C', src1)
cv2.waitKey(0)
cv2.destroyAllWindows()
發現這個函數比較奇葩,最後一個參數我這裏是用了原圖的變量來儲存,不用一個新變量的原因是我在Python3下用的是OpenCV3.4.1,如果用一個dst代替的化就會報錯,運行的效果如下:
秋風悽切傷離,
行客未歸時。
塞外草先衰,
江南雁到遲。
芙蓉凋嫩臉,
楊柳墮新眉。
搖落使人悲,
斷腸誰得知。