小轮廓变大轮廓morphologyEx

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/

Guess you like

Origin blog.csdn.net/l641208111/article/details/121526537