凌顺
凌顺

目录

OpenCV Python 使用不同阀值处理图像

本示例使用的OpenCV版本是:OpenCV 4.1.1
运行Python的编辑器:Jupyter notebook 6.0.0

实现目的

学会使用不同的阀值处理图像。

file

实现代码

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()

file

程序说明

OpenCV具有许多不同类型的阈值和阈值化方法。 您可以将所有方法分为两组:全局(对所有像素使用相同的阈值)和自适应(对阈值依赖于像素的自适应)。

可以通过 cv2.threshold 函数使用第一组中的方法,该函数除其他参数外还采用阈值类型(例如cv2.THRESH_BINARY和cv.THRESH_BINARY_INV)。
具体参考:https://docs.opencv.org/4.1.1/d7/d1b/group__imgproc__misc.html#gae8a4a146d1ca78c626a53577199e9c57

可通过 cv2.adaptiveThreshold 函数获得自适应阈值方法。 在自适应方法中,每个像素都有自己的阈值,该阈值取决于周围的像素值。 在前面的代码中,我们使用cv2.ADAPTIVE_THRESH_MEAN_C方法进行阈值估计,该方法计算周围像素的平均值,并将该值减去用户指定的偏差(在本例中为10)用作像素阈值。
具体参考:https://docs.opencv.org/4.1.1/d7/d1b/group__imgproc__misc.html#ga72b913f352e4a1b1b397736707afcde3