礼帽 = 原始输入 - 开运算结果,留存的以白色毛刺为主
黑帽 = 闭运算 - 原始输入,保留的更多是原始轮廓
# 导入OpenCV库,用于图像处理
import cv2
import numpy as np
# 从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", 0) # cat变量存储读取的图像数据,OpenCV默认以BGR格式读取
# 在名为'window'的窗口中显示图像
cv2.imshow('window', cat)
kernel = np.ones((5, 5), np.uint8)
opening = cv2.morphologyEx(cat, cv2.MORPH_TOPHAT, kernel) # 礼帽运算
closing = cv2.morphologyEx(cat, cv2.MORPH_BLACKHAT, kernel) # 黑帽运算
cv2.imshow('window1', opening)
cv2.imshow('window2', closing)
# 等待按键事件,0表示无限期等待
key = cv2.waitKey(0)
# 检查按下的键是否是'q',如果是则销毁所有窗口
if key & 0xFF == ord('q'): # 0xFF是掩码,用于确保只检查最低8位
print("准备销毁窗口")
cv2.destroyAllWindows()