本示例使用的OpenCV版本是:OpenCV 4.1.1
运行Python的编辑器:Jupyter notebook 6.0.0
实现目的
学会使用Opencv不同的阀值处理图像,例子涉及到cv2.threshold
函数和 cv2.adaptiveThreshold
函数的使用及效果。
实现代码
1,加载需要的库,灰度模式加载图片,显示图像
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('dog.png',0)
plt.imshow(img, cmap='gray')
2,应用一个简单的二进制阈值
thr, mask = cv2.threshold(img, 200, 1, cv2.THRESH_BINARY)
print('Threshold used:', thr)
3,应用自适应阈值
adapt_mask = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 10)
4,显示所有结果,进行对比
plt.figure(figsize=(10,10))
plt.subplot(131)
plt.axis('off')
plt.title('original')
plt.imshow(img, cmap='gray')
plt.subplot(132)
plt.axis('off')
plt.title('binary threshold')
plt.imshow(mask, cmap='gray')
plt.subplot(133)
plt.axis('off')
plt.title('adaptive threshold')
plt.imshow(adapt_mask, cmap='gray')
plt.tight_layout()
plt.show()
程序说明
OpenCV具有许多不同类型的阈值和阈值化方法。 您可以将所有方法分为两组:全局(对所有像素使用相同的阈值)和自适应(对阈值依赖于像素的自适应)。
可以通过 cv2.threshold
函数使用第一组中的方法,该函数除其他参数外还采用阈值类型(例如cv2.THRESH_BINARY和cv.THRESH_BINARY_INV)。
具体参考:OpenCV threshold函数
可通过 cv2.adaptiveThreshold
函数获得自适应阈值方法。 在自适应方法中,每个像素都有自己的阈值,该阈值取决于周围的像素值。 在前面的代码中,我们使用cv2.ADAPTIVE_THRESH_MEAN_C方法进行阈值估计,该方法计算周围像素的平均值,并将该值减去用户指定的偏差(在本例中为10)用作像素阈值。
具体参考:OpenCV adaptiveThreshold函数