小轮廓变大轮廓morphologyEx

本文介绍了OpenCV中的morphologyEx()函数,用于执行形态学变换,包括开运算、闭运算、形态学梯度、顶帽和黑帽。通过示例代码展示了如何使用结构元素对二值图像进行闭运算,以消除小黑洞,并找到图像中的最大轮廓并绘制出边界框。
摘要由CSDN通过智能技术生成

openvc中morphologyEx()函数是一种形态学变化函数。数学形态学可以理解为一种滤波行为,因此也称为形态学滤波。滤波中用到的滤波器(kernal),在形态学中称为结构元素。结构元素往往是由一个特殊的形状构成,如线条、矩形、圆等。

 开运算(open):先腐蚀后膨胀的过程。开运算可以用来消除小黑点,在纤细点处分离物体、平滑较大物体的边界的   同时并不明显改变其面积。

 闭运算(close):先膨胀后腐蚀的过程。闭运算可以用来排除小黑洞。

 形态学梯度(morph-grad):可以突出团块(blob)的边缘,保留物体的边缘轮廓。

 顶帽(top-hat):将突出比原轮廓亮的部分。

 黑帽(black-hat):将突出比原轮廓暗的部分。

代码举例:

    mask = cv2.inRange(image_hsv,lower_hsv,upper_hsv)

    # getStructuringElement函数会返回指定形状和尺寸的结构元素

    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))

    # morphologyEx 形态学变化函数

    mask = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)
mport cv2

import numpy as np

img = cv2.imread('test.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

kernel = np.ones((3,3), dtype=np.uint8)

closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

_, contours, hierarchy = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

cnt = max(contours, key=cv2.contourArea)

x,y,w,h = cv2.boundingRect(cnt)

cv2.rectangle(img, (x,y), (x+w, y+h), (255,255,0), 1)

cv2.imshow('img', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

参考:

https://blog.csdn.net/weixin_38796384/article/details/85008766

https://blog.csdn.net/weixin_36079903/article/details/114360039

https://www.freesion.com/article/3798512773/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DLANDML

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值