OpenCV中的图像基本操作--B站视频教程笔记(四)

本文是B站视频教程《OpenCV+TensorFlow》的笔记,主要讲解了OpenCV中的形态学操作,包括腐蚀、膨胀、开运算、闭运算、梯度运算、礼帽和黑帽。通过实例展示了这些操作对图像的影响,如去除毛边、细化线条等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习B站教学视频的时候记录的笔记

OpenCV+TensorFlow】迪哥带你做项目!深度学习+计算机视觉实战 纯实战教学 技能点加满


3.1 形态学

首先创建一张带毛边的图片如图:

读取图片代码如下:

img = cv2.imread('H:\Peronal\dige.png')
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.1.1 腐蚀操作

注意:腐蚀操作一般都是操作二值图像。

参数描述:

  • img 为原始图像

  • kernel 核

  • iterations 为迭代次数

代码如下:

#腐蚀操作
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations=1)
cv2.imshow('erosion',erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如图:

毛边没了,但线条也细了一些。

再准备一张图片进行测试。如图:

选择一个卷积核3x3,里面的设置不是很重要假设都是1。当使用这个核进行腐蚀的时候,如果中心点在圆形的中心,那么中心周围8个单元都是255,计算结果依然是255相当于没变化。

但腐蚀中心在圆形边缘的时候,中心周围的8格子部分为0

下面测试多次腐蚀代码如下:

pie = cv2.imread('H:\Peronal\pie.png')
kernel = np.ones((30,30),np.uint8)
erosion1 = cv2.erode(pie,kernel,iterations=1)
erosion2 = cv2.erode(pie,kernel,iterations=2)
erosion3 = cv2.erode(pie,kernel,iterations=3)
res = np.hstack((erosion1,erosion2,erosion3))
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如图:

3.1.2 膨胀操作

与腐蚀相对应的就是膨胀操作。可以理解为腐蚀的你操作。

cv2.dilate(img,kernel,iterations) 参数说明与腐蚀相同。

一下以进行过一次腐蚀操作的的dige.png为例。直接进行膨胀。代码如下:

# 膨胀操作
# erosion为腐蚀过一次dige的图像
kernel = np.ones((3,3),np.uint8)
dige_dilate = cv2.dilate(erosion,kernel,iterations=1)
res = np.hstack((img,erosion,dige_dilate))
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

以pie图像为例,测试多次膨胀后的效果,代码如下:

pie = cv2.imread('H:\Peronal\pie.png')
kernel = np.ones((30,30),np.uint8)
dilate1 = cv2.dilate(pie,kernel,iterations=1)
dilate2 = cv2.dilate(pie,kernel,iterations=2)
dilate3 = cv2.dilate(pie,kernel,iterations=3)
res = np.hstack((dilate1,dilate2,dilate3))
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.1.3 开运算与闭运算

开运算:先腐蚀,再膨胀

cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

参数说明:

  • img 原始图像

  • cv2.MORPH_OPEN 表示为开运算

  • kernel 卷积核

#开运算
img = cv2.imread('H:\Peronal\dige.png')
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow('opening',opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

闭运算:先膨胀,再腐蚀

cv2.morphologyEx(img,cv2.MORPH_LOSE,kernel)

参数说明参考开运算。

代码如下:

# 闭运算
img = cv2.imread('H:\Peronal\dige.png')
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow('opening',opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.1.4 梯度运算

首先退pie图像进行5次第膨胀+腐蚀代码如下:

pie = cv2.imread('H:\Peronal\pie.png')
kernel = np.ones((7,7),np.uint8)
dilate = cv2.dilate(pie,kernel,iterations=5)
erosion = cv2.erode(pie,kernel,iterations=5)
res = np.hstack((dilate,erosion))
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在此基础上执行减法,左图-右图,相当于左图超过右图的部分保留,相同的部分设置成黑色。这就是梯度运算

gradient =cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('gradient',gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.1.5 礼帽与黑帽

  • 礼帽 = 原始输入 - 开运算结果

  • 黑帽 = 闭运算 - 原始输入

    礼帽可以理解为 原始图像去掉 非毛边的部分=毛边,代码如下:

    #礼帽
    img = cv2.imread('H:\Peronal\dige.png')
    kernel = np.ones((5,5),np.uint8)
    tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
    cv2.imshow('tophat',tophat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

  • 黑帽:就剩下轮廓

    #黑帽
    img = cv2.imread('H:\Peronal\dige.png')
    blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
    cv2.imshow('blackhat',blackhat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

  • 关于腐蚀与膨胀原理的解释参看下面链接

    OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值