437 字
2 分钟
使用OpenCV检测水管
使用OpenCV检测水管
问题
某工地上安装地下水管,请你开发一个使用图像进行水管计数的程序。
提供两幅图像:1.jpg,2.jpg,图像中是从水管一端拍摄的,水管横截面为圆形。请你使用所学的知识,开发一个合适的技术,估计出这两幅图像中的水管数量,并与真实水管数量进行比较,计算估计的误差。
思路
发现这些水管颜色都是橙色rgb(255,128,20)
,于是考虑一个响应函数[草的颜色是rgb(255,128,128
左右,要把草分开)],给这个响应设定一个阈值,把原来图像的灰度图
得到一张响应图,虽然消除了一部分草,但是消除的木有很完全,也把一些水管弄消失了:
使用cv2.HoughCircles(image, method, dp, minDist, param1, param2, minRadius, maxRadius)
可以很简单的使用哈弗变换检测圆形,但是一定会漏检
如果不用这个响应函数,直接使用原图像的灰度图,那么会有错误检测:
使用类似于Canny的做法: 强圆有()个和弱圆有()个
正确的圆应该在强圆的附近,而且这个附近应该具有传递性。取这些圆的圆心。
用这些圆的圆心半径之间的距离建一张图,一共有个节点,如果两个圆心之间的距离小于某一个距离半径,则连一条边。最后从强圆圆心可达的弱圆圆心,把这些圆心作为最后的解答:
效果还不错,漏检的+错检测的效果累积起来,数量和真实情况差不多。
使用OpenCV检测水管
http://blog.fragments.work/posts/blogs/lab4/