📜  Python|使用 OpenCV 的阈值技术 | Set-2(自适应阈值)(1)

📅  最后修改于: 2023-12-03 15:34:18.176000             🧑  作者: Mango

Python | 使用 OpenCV 的阈值技术 | Set-2(自适应阈值)

在图像处理中,阈值(thresholding)是一种非常重要的技术,它是将图像处理成二值图像的一种常见方法,可以用来分离目标物体和背景。当然,不同的图像阈值处理方法适用的场景也是不同的。本篇文章主要介绍使用 OpenCV 中的自适应阈值处理方法。

自适应阈值处理

自适应阈值处理是一种动态地调整阈值的方法,它可以根据图像的局部特性来确定阈值。在自适应阈值处理中,我们需要选择一个适当的窗口大小,OpenCV 中有两种常用的窗口类型:均值窗口和高斯窗口。具体的实现方式是:对于图像中的每一个像素,根据该像素周围一定范围内的像素灰度值计算该像素的阈值,从而处理出该像素的二值化结果。这种处理方法常用于图像中存在大量的亮暗变化,或者图像中存在不同亮度的目标对象。

在 OpenCV 中,我们可以使用 cv2.adaptiveThreshold() 函数来实现自适应阈值处理。函数的语法如下:

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst])
  • src:需要处理的原始图像,必须是灰度图像;
  • maxValue:二值化后的最大值,通常设置为 255(即白色);
  • adaptiveMethod:自适应阈值处理方法,可选参数有 cv2.ADAPTIVE_THRESH_MEAN_C 和 cv2.ADAPTIVE_THRESH_GAUSSIAN_C 两种,分别代表均值和高斯窗口;
  • thresholdType:二值化处理类型,可选参数有 cv2.THRESH_BINARY 和 cv2.THRESH_BINARY_INV 两种,分别代表黑白和白黑两种;
  • blockSize:指定计算阈值时使用的像素邻域大小,必须是奇数;
  • C:阈值的调整量,通常为 0;
  • dst:输出图像,可选。

下面是一个使用自适应阈值处理方法的示例代码:

import cv2

img = cv2.imread('test.jpg', 0)

# 通过自适应阈值处理将图像处理成二值图像
binary = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

# 显示原始图像和二值图像
cv2.imshow('original', img)
cv2.imshow('binary', binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
总结

自适应阈值处理是一种动态的阈值处理方法,可以根据图像的局部特性来确定阈值,因此适用于灰度变化比较明显的图像。OpenCV 中提供了 cv2.adaptiveThreshold() 函数来实现自适应阈值处理,其中需要指定处理的原始图像、最大阈值、自适应窗口类型、二值化类型等参数。需要注意的是,自适应阈值处理方法只适用于灰度图像。