在opencv中检测半圆

在opencv中检测半圆

我试图检测图像中的完整圆圈和半圆在此输入图像描述

我遵循下面提到的过程:过程图像(包括Canny边缘检测)查找轮廓并在空图像上绘制它们,以便我可以消除不需要的组件。(处理过的图像正是我想要的。)使用HoughCircles检测圆圈。这就是我得到的。

我尝试改变HoughCircles中的参数,但结果不一致,因为它根据光线和图像中圆圈的位置而变化。我根据它的大小接受或拒绝一个圆圈。所以结果是不可接受的。此外,我还有一长串“可接受的”圈子,所以我需要在HoughCircle参数中留出一些余量。至于完整的圆圈,很容易 - 我可以简单地找到轮廓的“圆度”。问题是半圈!

请在hough变换前找到编辑过的图像在此输入图像描述

繁花如伊
浏览 1859回答 3
3回答

犯罪嫌疑人X

我知道它有点晚了,但我使用了更简单的方法。从cv2.HoughCircles(...)你得到圆的中心和直径(x,y,r)。因此,我只需浏览圆圈的所有中心点,然后检查它们是否远离图像边缘而不是直径。这是我的代码:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height,&nbsp;width&nbsp;=&nbsp;img.shape[:2] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test&nbsp;top&nbsp;edge &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;up&nbsp;=&nbsp;(circles[0,&nbsp;:,&nbsp;0]&nbsp;-&nbsp;circles[0,&nbsp;:,&nbsp;2])&nbsp;>=&nbsp;0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test&nbsp;left&nbsp;edge &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left&nbsp;=&nbsp;(circles[0,&nbsp;:,&nbsp;1]&nbsp;-&nbsp;circles[0,&nbsp;:,&nbsp;2])&nbsp;>=&nbsp;0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test&nbsp;right&nbsp;edge &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right&nbsp;=&nbsp;(circles[0,&nbsp;:,&nbsp;0]&nbsp;+&nbsp;circles[0,&nbsp;:,&nbsp;2])&nbsp;<=&nbsp;width &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#test&nbsp;bottom&nbsp;edge &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;down&nbsp;=&nbsp;(circles[0,&nbsp;:,&nbsp;1]&nbsp;+&nbsp;circles[0,&nbsp;:,&nbsp;2])&nbsp;<=&nbsp;height &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;circles&nbsp;=&nbsp;circles[:,&nbsp;(up&nbsp;&&nbsp;down&nbsp;&&nbsp;right&nbsp;&&nbsp;left),&nbsp;:]
打开App,查看更多内容
随时随地看视频慕课网APP