3.2自适应阈值
运行截图
import cv2
from matplotlib import pyplot as plt
# 读取图像
im1 = cv2.imread("./image/qp.jpg")
# 检查图像是否成功加载
if im1 is None:
print("Error: Image not found or unable to read.")
exit()
# 转换为灰度图
gray = cv2.cvtColor(im1, cv2.COLOR_BGR2GRAY)
# 应用全局阈值
ret, th1 = cv2.threshold(gray, 66, 255, cv2.THRESH_BINARY)
# 应用自适应阈值(均值)
th2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, 11, 2)
# 应用自适应阈值(高斯)并反二值化
th3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV, 11, 2)
# 设置标题列表(修正拼写错误)
titles = ["Original", "TH_BINARY", "TH_ADAPTIVE_MEAN_C", "TH_ADAPTIVE_GAUSSIAN_C_INV"]
images = [im1, th1, th2, th3]
# 使用matplotlib显示图像
for i in range(4):
plt.subplot(2, 2, i + 1)
plt.imshow(images[i], cmap='gray') # 使用cmap='gray'来指定灰度颜色映射
plt.title(titles[i])
plt.axis('off') # 关闭坐标轴
plt.tight_layout() # 调整子图布局
plt.show()
ret, th1 = cv2.threshold(gray, 66, 255, cv2.THRESH_BINARY)
:对灰度图像gray
进行全局二值化阈值处理。66
是设定的阈值。255
是最大值。cv2.THRESH_BINARY
表示阈值类型为二值化,即大于阈值的像素设置为最大值255
(白色),小于等于阈值的像素设置为0
(黑色),处理结果存储在th1
中,ret
是返回的阈值(这里未使用)。th2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
:对灰度图像gray
进行自适应阈值处理,采用均值方法。255
是最大值。cv2.ADAPTIVE_THRESH_MEAN_C
表示自适应阈值类型为均值。cv2.THRESH_BINARY
表示阈值类型为二值化。11
是邻域大小,即计算阈值时考虑的像素邻域大小。2
是从均值或加权均值中减去的常数,用于调整阈值,处理结果存储在th2
中。th3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
:对灰度图像gray
进行自适应阈值处理,采用高斯方法,并进行反二值化。255
是最大值。cv2.ADAPTIVE_THRESH_GAUSSIAN_C
表示自适应阈值类型为高斯。cv2.THRESH_BINARY_INV
表示阈值类型为反二值化,即大于阈值的像素设置为0
,小于等于阈值的像素设置为255
。11
是邻域大小。2
是从加权均值中减去的常数,处理结果存储在th3
中。