437 字
2 分钟
使用OpenCV检测水管

使用OpenCV检测水管#

问题#

某工地上安装地下水管,请你开发一个使用图像进行水管计数的程序。

提供两幅图像:1.jpg,2.jpg,图像中是从水管一端拍摄的,水管横截面为圆形。请你使用所学的知识,开发一个合适的技术,估计出这两幅图像中的水管数量,并与真实水管数量进行比较,计算估计的误差。

思路#

发现这些水管颜色都是橙色rgb(255,128,20),于是考虑一个响应函数r+(gb)r + (g - b)[草的颜色是rgb(255,128,128左右,要把草分开)],给这个响应设定一个阈值threshthresh,把原来图像的灰度图

得到一张响应图,虽然消除了一部分草,但是消除的木有很完全,也把一些水管弄消失了:

使用cv2.HoughCircles(image, method, dp, minDist, param1, param2, minRadius, maxRadius)可以很简单的使用哈弗变换检测圆形,但是一定会漏检

如果不用这个响应函数,直接使用原图像的灰度图,那么会有错误检测:

使用类似于Canny的做法: 强圆有(mm)个和弱圆有(nn)个

正确的圆应该在强圆的附近,而且这个附近应该具有传递性。取这些圆的圆心。

用这些圆的圆心半径之间的距离建一张图,一共有m+nm+n个节点,如果两个圆心之间的距离小于某一个距离半径disthresh=150dis_{thresh} = 150,则连一条边。最后从强圆圆心可达的弱圆圆心,把这些圆心作为最后的解答:

效果还不错,漏检的+错检测的效果累积起来,数量和真实情况差不多。

使用OpenCV检测水管
http://blog.fragments.work/posts/blogs/lab4/
作者
Lixin WANG
发布于
2024-06-15
许可协议
CC BY-NC-SA 4.0