【Python+OpenCV入门学习】十五、形态学处理

18 篇文章 3 订阅

本篇文章介绍图像的形态学处理,如腐蚀、膨胀、开运算、闭运算、顶帽、黑帽等。

主要学习cv.erode(),cv.dilate(),cv.morphologyEx()等函数的使用。

环境:Windows 7(64)   Python 3.6    OpenCV 3.4.2

一、腐蚀和膨胀

1.1 erode()、dilate()函数介绍

erode()函数形式如下:

dst = cv.erode( src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]] )

功能:对图像进行腐蚀处理。

参数:

src:输入图像,可以是灰度图像,可以是彩色图像。

dst:输出图像。

kernel:用于腐蚀运算的核结构元素,可以使用getStructuringElement()函数创建。

anchor:锚点,默认为(-1, -1)

iterations:迭代次数

borderType:边界填充类型

borderValue:边界填充值

dilate()函数形式如下:

dst = cv.erode( src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]] )

功能:对图像进行腐蚀处理。

参数:

src:输入图像,可以是灰度图像,可以是彩色图像。

dst:输出图像。

kernel:用于腐蚀运算的核结构元素,可以使用getStructuringElement()函数创建。

anchor:锚点,默认为(-1, -1)

iterations:迭代次数

borderType:边界填充类型

borderValue:边界填充值

getStructuringElement()函数形式如下:

retval = cv.getStructuringElement( shape, ksize[, anchor] )

功能:返回指定大小和形状的结构元素,用于形态学处理。

参数:

shape:元素形状。

ksize:大小

anchor:锚点,默认为(-1, -1)

shape的取值如下:

cv.MORPH_RECT:矩形结构元素

cv.MORPH_CROSS:十字形结构元素

cv.MORPH_ELLIPSE:椭圆形结构元素

1.2 编程测试

代码如下

import cv2 as cv
import numpy as np

img = cv.imread('1.png',0)

kernel = np.ones((7,7), np.uint8)
#腐蚀
dstErosion = cv.erode(img,kernel,iterations = 1)

#膨胀
dstDilation = cv.dilate(img,kernel,iterations = 1)

#显示
cv.namedWindow('SrcImage')
cv.imshow('SrcImage',img)

cv.namedWindow('Erosion')
cv.imshow('Erosion',dstErosion)

cv.namedWindow('Dilation')
cv.imshow('Dilation',dstDilation)

运行结果对比图如下所示。可以看出腐蚀操作就是让白色区域减少;膨胀就是将白色区域变大。

     

二、开运算和闭运算等

2.1 morphologyEx()函数介绍

morphologyEx()函数形式如下:

dst = cv.morphologyEx( src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]] )

功能:对图像进行高级的形态学处理,都是基于膨胀和腐蚀的,如形态学梯度,开运算,闭运算,顶帽,黑帽等。

参数:

src:输入图像,可以是灰度图像,可以是彩色图像。

dst:输出图像。

op:形态学处理的类型

kernel:用于腐蚀运算的核结构元素,可以使用getStructuringElement()函数创建。

anchor:锚点,默认为(-1, -1)

iterations:迭代次数

borderType:边界填充类型

borderValue:边界填充值

op参数取值如下:

cv.MORPH_ERODE:腐蚀

 cv.MORPH_DILATE:膨胀

cv.MORPH_OPEN:开运算。先腐蚀后膨胀

cv.MORPH_CLOSE:闭运算。先膨胀后腐蚀

 cv.MORPH_GRADIENT:形态学梯度。膨胀减去腐蚀

cv.MORPH_TOPHAT:顶帽。原图减去开运算

cv.MORPH_BLACKHAT:黑帽。闭运算减去原图

cv.MORPH_HITMISS:击中击不中。仅支持CV_8UC1

2.2 编程测试

代码如下

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

img = cv.imread('1.png',0)

kernel = cv.getStructuringElement(cv.MORPH_CROSS,(7,7))
#开运算
dstOpening = cv.morphologyEx(img,cv.MORPH_OPEN,kernel)
#闭运算
dstClosing = cv.morphologyEx(img,cv.MORPH_CLOSE,kernel)
#形态学梯度
dstGradient = cv.morphologyEx(img,cv.MORPH_GRADIENT,kernel)
#顶帽
dstTopHat = cv.morphologyEx(img,cv.MORPH_TOPHAT,kernel)
#黑帽
dstBlackHat = cv.morphologyEx(img,cv.MORPH_BLACKHAT,kernel)

#显示
plt.subplot(321),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(322),plt.imshow(dstOpening),plt.title('Opening')
plt.xticks([]), plt.yticks([])
plt.subplot(323),plt.imshow(dstClosing),plt.title('Closing')
plt.xticks([]), plt.yticks([])
plt.subplot(324),plt.imshow(dstGradient),plt.title('Gradient')
plt.xticks([]), plt.yticks([])
plt.subplot(325),plt.imshow(dstTopHat),plt.title('TopHat')
plt.xticks([]), plt.yticks([])
plt.subplot(326),plt.imshow(dstBlackHat),plt.title('BlackHat')
plt.xticks([]), plt.yticks([])
plt.show()

运行结果图如下:

                           

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值