在opencv中提供了閾值操作,給定閾值進行分割圖像
import cv2 import numpy as np import matplotlib.pyplot as plt img_gray=cv2.imread("c:\\Users\\Administrator\\Desktop\\123\\cat2.jpg",cv2.IMREAD_GRAYSCALE) #>127--->255 <127----->0 ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY) #thresh1的反轉 ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV) #截斷值 >127---變為等於255 ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC) #大於127不變,小於等於127變為0---to zero ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO) #thresh4的反轉 ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV) titles = ['original', 'binary','binaty_inv','trunc','tozero','tozero_inv'] images = [img_cat2,thresh1,thresh2,thresh3,thresh4,thresh5] for i in range(6): plt.subplot(2,3,i+1),plt.imshow(images[i],'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()

上圖為讀灰度圖得到的結果,下圖為讀原圖得到的結果。

上面給了五種方式,上圖第一個為原圖。改變 cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)的參數可得到不同的結果
1、cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY):像素值大於127的值變為255,小於127的變為0。
2、cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV):與1正好相反。
3、ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC):像數值大於127變為255,小於127變為不變。
4、ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO):像數值大於127不變,小於127變為0。
5、ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV):與4相反,像數值大於127變為0,小於127不變。
