关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数):
简介
图像二值化是一种将灰度图像转换为黑白二值图像的过程,即将像素点的灰度值转换为0或255,使图像中只有黑白两色。这种操作在机器视觉、图像处理中经常用到,如字符识别、边缘检测等。
Python中的OpenCV库提供了cv2.adaptiveThreshold函数用于进行图像二值化。该函数可以在局部区域内自适应地进行二值化操作,因此更适用于处理复杂的图像。
函数参数
cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) -> dst
其中:
- src: 输入图像,需为灰度图像
- maxValue: 二值化后的最大值,若当前像素值高于指定的阈值则被赋值为该值
- adaptiveMethod: 自适应阈值算法,取值为cv2.ADAPTIVE_THRESH_MEAN_C或cv2.ADAPTIVE_THRESH_GAUSSIAN_C
- thresholdType: 阈值类型,取值为cv2.THRESH_BINARY或cv2.THRESH_BINARY_INV
- blockSize: 自适应区域大小,必须为奇数且大于1
- C:从均值中减去的值
示例1
下面是一个简单的示例,展示了如何使用cv2.adaptiveThreshold函数对一张图像进行二值化:
import cv2
img = cv2.imread('original_image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresholded = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize=11, C=2)
cv2.imshow('thresholded', thresholded)
cv2.waitKey()
cv2.destroyAllWindows()
在这个示例中,我们先读入一张彩色图像,将其转换为灰度图像,然后使用cv2.adaptiveThreshold函数对其进行二值化操作。函数中的参数说明如下:
- maxValue设为255,即二值化后的最大值为255
- adaptiveMethod取值为cv2.ADAPTIVE_THRESH_MEAN_C,即使用均值对局部区域进行自适应的二值化操作
- thresholdType取值为cv2.THRESH_BINARY,即二值化操作以像素值>=阈值时反白显示
- blockSize设为11,表示自适应区域大小为11*11的像素块
- C设为2,表示从均值中减去2作为阈值
示例2
下面再演示一个在实际应用中常见的场景,即对二维码图片进行二值化:
import cv2
img = cv2.imread('qrcode.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 简单的阈值
_, thresholded_simple = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 自适应阈值
thresholded_adaptive = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize=7, C=15)
cv2.imshow('thresholded_simple', thresholded_simple)
cv2.imshow('thresholded_adaptive', thresholded_adaptive)
cv2.waitKey()
cv2.destroyAllWindows()
在这个示例中,我们先读入一张二维码图片,将其转换为灰度图像,然后使用cv2.threshold函数进行简单阈值处理,再使用cv2.adaptiveThreshold函数进行自适应阈值处理。其中,自适应阈值处理中的参数blockSize设为7,表示自适应区域大小为7*7的像素块;参数C设为15,表示从均值中减去15作为阈值。
通过对比以上两种二值化处理结果,可以发现自适应阈值处理能够更好地保留二维码图案的细节特征。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数) - Python技术站