形态特征目标检测
在初始学习的开始,又再次补了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 )
,不完全是在阈值选取,其定值阀值本身对检测有影响,而且榛子其周围的阴影与榛子本身的干扰造成其形态检测以阴影周围为真实边缘。