【python-opencv】图像阈值
1、简单阈值 在这里,问题直截了当。对于每个像素,应用相同的阈值。如果像素值小于阈值,则将其设置为0,否则将其设置为最大值。函数cv.threshold用于应用阈值。第一个参数是源图像,它应该是灰度图像。第二个参数是阈值,用于对像素值进行分类。第三个参数是分配给超过阈值的像素值的最大值。OpenCV提供了不同类型的阈值,这由函数的第四个参数给出。通过使用cv.THRESH_BINARY类型。所有简单的阈值类型为:
请通过类型的文档来观察区别。 该方法返回两个输出。第一个是使用的阈值,第二个输出是阈值后的图像。 此代码比较了不同的简单阈值类型: import cv2 as cv numpy as np from matplotlib pyplot as plt img = cv.imread('gradient.png',0) ret,thresh1 = cv.threshold(img,127,255Original Image',BINARYBINARY_INVTRUNCTOZEROTOZERO_INV] images = [img,thresh1,thresh2,thresh3,thresh4,thresh5] for i in xrange(6): plt.subplot(2,3,i+1),plt.imshow(images[i],1)">gray) plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show() 注意?为了绘制多个图像,我们使用 结果: 2、自适应阈值 在上一节中,我们使用一个全局值作为阈值。但这可能并非在所有情况下都很好,例如,如果图像在不同区域具有不同的光照条件。在这种情况下,自适应阈值阈值化可以提供帮助。在此,算法基于像素周围的小区域确定像素的阈值。因此,对于同一图像的不同区域,我们获得了不同的阈值,这为光照度变化的图像提供了更好的结果。 除上述参数外,方法cv.adaptiveThreshold还包含三个输入参数: 该adaptiveMethod决定阈值是如何计算的: cv.ADAPTIVE_THRESH_MEAN_C::阈值是邻近区域的平均值减去常数C。cv.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值的高斯加权总和减去常数C。 该BLOCKSIZE确定附近区域的大小,C是从邻域像素的平均或加权总和中减去的一个常数。 下面的代码比较了光照变化的图像的全局阈值和自适应阈值: pyplot as plt img=cv.imread(阈值.png) ret,th1 = cv.threshold(img,cv.THRESH_BINARY) th2 = cv.adaptiveThreshold(img,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,11,2) th3 = cv.adaptiveThreshold(img,cv.ADAPTIVE_THRESH_GAUSSIAN_C,1)">) titles = [Global Thresholding (v = 127)Adaptive Mean ThresholdingAdaptive Gaussian Thresholdingin range(4 |