如何使用 Python OpenCV 对图像进行自适应均值和高斯阈值处理?


自适应阈值是一种阈值处理技术。还有其他类型的阈值处理技术,例如使用全局阈值值的简单阈值处理。但是,对于在不同区域具有不同光照条件的图像,使用全局阈值值并不是一个好主意。

自适应阈值计算图像中一小区域的阈值。因此,图像中不同区域具有不同的阈值,与简单的阈值处理技术相比,这可以提供更好的结果。

有三个特殊的参数:adaptive_method、block_sizeconst。请参阅下面给出的语法。

语法

cv2.adaptiveThreshold(img, max_val, adaptive_method, thresh_type, block_size, const)

参数

  • img − 输入灰度图像。它是一个 numpy.ndarray。

  • max_valu − 要分配给像素的最大值。

  • adaptive_method − 它决定如何计算阈值。有两种不同的自适应阈值方法 -

    • cv2.ADAPTIVE_THRESH_MEAN_C − 在此方法中,阈值是邻域区域的平均值。

    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C − 在此方法中,阈值是邻域值的加权和,其中权重是高斯窗口。

  • thresh_type − 要应用的阈值类型。

  • block_size − 决定邻域区域的大小。

  • const − 从计算出的平均值或加权平均值中减去的常数。

输出 - 它返回阈值

让我们借助几个 Python 示例来了解自适应均值阈值和自适应高斯阈值。

输入图像

我们将在以下示例中使用此图像作为输入文件。

示例 1:自适应均值阈值

在此程序中,我们使用cv2.ADAPTIVE_THRESH_MEAN_C 作为自适应方法对输入图像应用自适应阈值。我们使用block_size=11const=2。我们使用二进制阈值作为thresh_type

import cv2 # Read the input RGB image as a Gray Scale image img = cv2.imread('floor.jpg',0) # apply median blur img = cv2.medianBlur(img,5) # apply adaptive mean thresholding th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2) # display the output image cv2.imshow("Adaptive Mean Thresholding", th) cv2.waitKey(0) cv2.destroyAllWindows()

输出

运行以上程序后,将生成以下输出窗口 -

以上输出显示了应用自适应均值阈值后的图像。

示例 2:自适应高斯阈值

在此程序中,我们使用cv2.ADAPTIVE_THRESH_GAUSSIAN_C 作为自适应方法对输入图像应用自适应阈值。

我们使用block_size=11const=2。我们使用二进制阈值作为thresh_type

import cv2 # Read the input RGB image as a Gray Scale image img = cv2.imread('floor.jpg',0) # apply median blur img = cv2.medianBlur(img,5) # apply adaptive mean thresholding th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2) # display the output image cv2.imshow("Adaptive Gaussian Thresholding", th) cv2.waitKey(0) cv2.destroyAllWindows()

输出

运行以上程序后,将生成以下输出。

以上输出显示了应用自适应高斯阈值后的图像。

更新于: 2022年9月27日

2K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.