1.图像的读取
由于opencv的兼容性没有Image强,所以建议读取图像时用Image来进行读取,而不用opencv来进行读取,但opencv对图像的操作性强,所以可以先对图像进行Image读取再转化为opencv的对象,如
from PIL import Image
import cv2
import numpy as np
# 打开PIL图像
pil_img = Image.open("1.png")
# 转换为OpenCV格式(RGB → BGR)
opencv_img = np.array(pil_img)
opencv_img = cv2.cvtColor(opencv_img, cv2.COLOR_RGB2BGR)
# 现在可以使用OpenCV函数处理图像
cv2.imshow("OpenCV Image", opencv_img)
cv2.waitKey(0)
代码所示
2.图像的腐蚀操作代码
kernel=np.ones((3,3),np.uint8)
erosion=cv2.erode(opencv_img,kernel,iterations=1)
cv2.imshow("erosion", erosion)
cv2.waitKey(0)
3.图像的膨胀操作代码
kernel=np.ones((3,3),np.uint8)
dilation=cv2.dilate(opencv_img,kernel,iterations=1)
cv2.imshow("dilation", dilation)
cv2.waitKey(0)
4.图像的开运算代码
kernel=np.ones((3,3),np.uint8)
opening = cv2.morphologyEx(opencv_img, cv2.MORPH_OPEN, kernel)
cv2.imshow("opening", opening)
cv2.waitKey(0)
5.图像的闭运算操作代码
kernel=np.ones((3,3),np.uint8)
closing = cv2.morphologyEx(opencv_img, cv2.MORPH_CLOSE, kernel)
cv2.imshow("closing", closing)
cv2.waitKey(0)
6.图像的梯度计算操作代码
img3=cv2.erode(opencv_img1,kernel,iterations=1)
img4=cv2.dilate(opencv_img1,kernel,iterations=1)
res=np.hstack([img3,img4])
cv2.imshow("img3", res)
cv2.waitKey(0)
gradient=cv2.morphologyEx(opencv_img1,cv2.MORPH_GRADIENT,kernel)
cv2.imshow("gradient", gradient)
cv2.waitKey(0)
7.图像的顶帽与黑帽
tophat=cv2.morphologyEx(opencv_img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow("tophat", tophat)
cv2.waitKey(0)
blackhat=cv2.morphologyEx(opencv_img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow("blackhat", blackhat)
8.顶帽与黑帽的比较
特性 | 顶帽变换(Top Hat) | 黑帽变换(Black Hat) |
---|---|---|
数学公式 | 原图像 - 开运算结果 | 闭运算结果 - 原图像 |
提取目标 | 比背景亮的区域(如亮噪声、亮线条) | 比前景暗的区域(如暗孔洞、暗边缘) |
应用场景 | 背景均衡化、亮物体检测、文档扫描优化 | 细节增强、孔洞检测、深色文本提取 |
视觉效果 | 暗背景上的亮区域更突出 | 亮前景中的暗区域更突出 |