OpenCV提供了两个函数cv2.threshold() 和 cv2.adaptiveThreshold(),用于实现阈值处理。
1.cv2.threshold()函数
retval,dst =cv2.threshold(src, thresh, maxval,type)
式中
-- retval 代表返回的阈值;
-- dst 代表阈值分割结果图像,与原始图像具有相同的大小和类型;
-- src 代表要进行阈值分割的图像,可以是多通道的,8位或32位浮点型数值;
-- thresh 代表要设定的阈值;
-- maxval代表当type参数为THRESH_BINARY或者THRESH_BINARY_INV类型时,需要设置的最大值;
-- type代表要分割的类型。
1)二值化阈值处理(cv2.THRESH_BINARY)
会将原始图像处理为仅包含两个值的二值图像。将大于阈值的像素点其灰度值设为最大值。小于或等于阈值的像素点设置为0。(在8位图像中,最大值是255)
2)反二值化阈值预处理(cv2.THRESH_BINARY_INV)
也是得到一幅二值图像。与cv2.THRESH_BINARY相反,大于阈值的像素点设定为0;大于小于阈值的设定为最大值。
代码如下:
img = cv2.imread('wasser_2.jpg')
# 默认指定原图像坐标(0,0)为缩小区域以外的颜色。
# mapxy = scale_img(img, 2)
shape_img = img.shape
# 二值化处理
yu, rst = cv2.threshold(img,180,255,type=cv2.THRESH_BINARY)
# 反二值化处理
yu2, rst_f = cv2.threshold(img,180,255,type=cv2.THRESH_BINARY_INV)
cv2.imshow("img",img)
cv2.imshow("erzhi_img_%s"%yu,rst)
cv2.imshow("erzhi_img_f%s"%yu,rst_f)
return_value = cv2.waitKey(0)
cv2.destroyAllWindows()
效果:(注意原始图像是彩色图)
3)截断阈值化处理(cv2.THRESH_TRUNC)
将超过阈值的像素点的值设为阈值。
4)超阈值零处理(cv2.THRESH_TOZERO_INV)
将超过阈值的像素点的值设为零。
5)低于阈值零处理(cv2.THRESH_TOZERO)
将低于阈值的像素点的值设为零。
2.自适应阈值处理
对于色彩均衡的图像,直接用一个阈值就能完成对图像的阈值化处理。但是有时候图像的色彩是不均衡的,此时如果只使用一个阈值,就无法得到清洗有效的阈值分割图像。
自适应阈值处理:通过计算像素点周围邻近区域的加权平均值获得阈值。并使用该阈值对当前像素点进行处理。·该方法能够很好的处理明暗差异较大的图像。
方法:cv2.adaptiveThreshold()
cv2.adaptiveThreshold(src,maxvalue,adaptiveMethod,thresholdType,blockSize,C)
src :代表原始图像,而且该图像必须是8位单通道的图像;
adaptiveMethod :代表自适应方法,包含cv2.ADAPTIVE_THRESH_MEAN_C和cv2.ADAPTIVE_THRESH_GAUSSIAN_C两种不同的方法。两种方法都是逐个元素计算自适应阈值,自适应阈值等于每个像素由blockSize所指定邻域的加权平均值减去常量C;
maxvalue :代表最大值;
thresholdType : 代表阈值的处理方式,该值必须是cv2.THRESH_BINARY或者cv2.THRESH_BINARY中的一个;
blockSize :代表块大小,表示计算阈值时所使用的邻域尺寸,通常为3、5、7等;
C :是常量
例如提取彩色图像的G通道来进行自适应阈值处理:
meanAth = cv2.adaptiveThreshold(img[:,:,1],255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)
gaussAth = cv2.adaptiveThreshold(img[:,:,1],255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)
3.Otsu处理
Otsu方法能够根据当前图像给出最佳的类间分割阈值(通过遍历所有可能阈值)。通过在cv2.threshold()的type参数的类型多传递一个参数"cv2.THRESH_OTSU",并且将阈值设为零,即可实现Otsu阈值分割,并且返回最优阈值和分割结果。注:该方法只适用于处理单通道数据。
网友评论