ret, dst = cv2.threshold(src, thresh, maxval, type)
·src: 输入图,只能输入单通道图像,通常来说为灰度图
·dst: 输出图
·thresh: 阈值
·maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
·type: 二值化操作的类型,包含以下5种类型:cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO; cv2.THRESH_TOZERO_INV
·cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
·cv2.THRESH_BINARY_INV THRESH_BINARY的反转
·cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
·cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
·cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
python
# 导入OpenCV库,用于图像处理
import cv2
# 从matplotlib库中导入pyplot模块,用于绘制图像
from matplotlib import pyplot as plt
# 创建一个名为'window'的窗口,窗口大小自动调整
cv2.namedWindow('window', cv2.WINDOW_AUTOSIZE) # cv2.WINDOW_AUTOSIZE: 窗口大小自动调整,不允许用户改变窗口大小
# 使用OpenCV的imread函数读取名为"mao.jpg"的图片,参数1表示读取彩色图像
cat = cv2.imread("mao.jpg", 1) # cat变量存储读取的图像数据,OpenCV默认以BGR格式读取
# 在名为'window'的窗口中显示图像
cv2.imshow('window', cat)
# 对图像进行二值化处理,使用不同的阈值类型
ret, thresh1 = cv2.threshold(cat, 127, 255, cv2.THRESH_BINARY) # 二进制阈值
ret, thresh2 = cv2.threshold(cat, 127, 255, cv2.THRESH_BINARY_INV) # 反二进制阈值
ret, thresh3 = cv2.threshold(cat, 127, 255, cv2.THRESH_TRUNC) # 截断阈值
ret, thresh4 = cv2.threshold(cat, 127, 255, cv2.THRESH_TOZERO) # 阈值化为0
ret, thresh5 = cv2.threshold(cat, 127, 255, cv2.THRESH_TOZERO_INV) # 反阈值化为0
# 定义图像标题列表
titles = ['Original Image', 'Binary Image', 'THRESH_BINARY_INV', 'THRESH_TRUNC', 'THRESH_TOZERO', 'THRESH_TOZERO_INV']
# 定义图像列表
images = [cat, thresh1, thresh2, thresh3, thresh4, thresh5]
# 使用matplotlib绘制所有图像及其标题
for i in range(6):
# 创建子图,2行3列,当前位置为i+1
plt.subplot(2, 3, i+1)
# 显示图像,使用灰度颜色映射
plt.imshow(images[i], 'gray')
# 设置子图标题
plt.title(titles[i])
# 隐藏x轴和y轴的刻度
plt.xticks([]), plt.yticks([])
# 显示所有子图
plt.show()
# 等待按键事件,0表示无限期等待
key = cv2.waitKey(0)
# 检查按下的键是否是'q',如果是则销毁所有窗口
if key & 0xFF == ord('q'): # 0xFF是掩码,用于确保只检查最低8位
print("准备销毁窗口")
cv2.destroyAllWindows()
效果展示