如何使用Python OpenCV执行自适应均值和高斯阈值处理图像?
自适应阈值处理 是一种阈值处理技术。还有其他类型的阈值处理技术,例如使用全局阈值值的简单阈值处理技术。但是,在不同区域具有不同照明条件的图像中使用全局阈值值并不是一个好主意。
自适应阈值处理 计算图像中一个小区域的阈值值。因此,我们在图像中有不同的阈值值,可以与简单阈值处理技术相比,得到更好的结果。
有三个特殊参数: adaptive_method、 block_size 和 const 。请参见下面给定的语法。
语法
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 = 11 和 const = 2 。我们将 thresh_type 设置为 二进制阈值 。
import cv2
# 将输入RGB图像读取为灰度图像
img = cv2.imread('floor.jpg',0)
# 应用中值模糊
img = cv2.medianBlur(img,5)
# 应用自适应平均阈值处理
th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2)
# 显示输出图像
cv2.imshow("自适应平均阈值处理", th)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当您运行上面的程序时,它将产生以下 输出 窗口-
上面的输出显示了应用自适应平均阈值分割后的图像。
示例2:自适应高斯阈值法
在本程序中,我们使用 cv2.ADAPTIVE_THRESH_GAUSSIAN_C 作为自适应方法,对输入图像进行自适应阈值处理。
我们使用 block_size=11 和 const=2 ,同时使用二进制阈值法作为 thresh_type 。
import cv2
# 读取灰度图像作为输入RGB图像
img = cv2.imread('floor.jpg',0)
# 进行中值滤波
img = cv2.medianBlur(img,5)
# 进行自适应阈值处理
th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
# 显示处理后的图像
cv2.imshow("自适应高斯阈值法", th)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
当您运行上面的程序时,它将产生以下输出。
上述输出显示了应用自适应高斯阈值法处理后的图像。