目标检测- findContours drawContours 的学习

形态特征目标检测

在初始学习的开始,又再次补了Python的基础,接着再对比Matlab图像库跟Opencv图像库对比学习,本次形态特征检测主要用到的CV2模块。
由于我们人眼所看到的图像都是RGB图,所以下在计算机下的识别只能识别0,1,所以需要用到CV2模块下的二值化,滤波(median),膨胀(erode)与腐蚀(dilate),findcontours函数。

findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method, Point offset=Point());

详细的原型函数讲https://blog.youkuaiyun.com/dcrmg/article/details/51987348

此次主要是对轮廓检测函数学习,此次检测的目标以榛子的外轮廓为主。
对处理后的图像寻找其轮廓
cv2.findContours(dilate_img,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
寻找轮廓的关键在于定义函数的模式(mode),方法(method)。

    cv2.RETR_TREE  #检测所有轮廓,cv2.CHAIN_APPROX_SIMPLE  #保存所有轮廓信息。

绘制轮廓函数

    cv2.drawContours(img, [contour,], -1, (255, 0, 0), 2,0)   #输出图像 所有输入轮廓绘制 线性颜色 轮廓线粗细 层级轮廓 。

RGB图转为二值图

在二值图下可以看到黑色附近有很多白点噪声,可以经过一次非线性中值滤波(3X3)来滤除白点噪声。
在这里插入图片描述
经过中值滤波后可以发现黑色区域周围还是存在一些干扰噪声,在经过一次开运算(opening)-先腐蚀再膨胀,可以消除白点噪声

腐蚀(erode)

erode_img = cv2.erode(img_median, kernel, iterations=3)#定义椭圆性结构腐蚀

在这里插入图片描述
膨胀(dilate)

dilate_img = cv2.dilate(erode_img, element,iterations=3)#图像膨胀

在这里插入图片描述
在这里插入图片描述
形态特征检测显示效果只有一个很完美(大于设定阀值130)_,bin_img = cv2.threshold(gray_img, 130, 255, cv2.THRESH_BINARY ),不完全是在阈值选取,其定值阀值本身对检测有影响,而且榛子其周围的阴影与榛子本身的干扰造成其形态检测以阴影周围为真实边缘。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Leon在努力啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值