1、问题描述
在使用全局阈值可能会导致局部区域全黑,但是使用自适应阈值的二值化能够很好的避免这样的问题。使用opencv提供的adaptiveThreshold算法技能实现了。adaptiveThreshold算法的思想不是计算图像的全局阈值,而是计算图片的局部阈值,根据图像不同区域亮度分布,计算局部阈值,所以对于图像不同区域,能够计算不同阈值,因此又被称作自适应算法。
2、效果展示
同样是使用Lenna图来进行实验。左侧是使用全局阈值处理的二值化图像,右侧是使用adaptiveThreshold函数处理二值化的图像,可见效果还是挺明显的。
3、具体代码
#注意这里传进来的是灰度图
def binaryzation(img):
th1 = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY, 11, 2)
ret2, th2 = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
ret3, th3 = cv.threshold(img,127,255,cv.THRESH_BINARY_INV)
ret4, th4 = cv.threshold(img, 127, 255, cv.THRESH_TRUNC)
temp1 = cv.hconcat((th2,th1))
temp2 = cv.hconcat((th3,th4))
temp = cv.vconcat((temp1,temp2))
cv.imshow("result",temp)
cv.waitKey()