2

目前我试图做这种类型的图像上线检测:线检测蟒蛇从图片

Original picture taken from my phone

顶部和底部有黑条只是因为,我拍的照片,不是因为调整大小或任何东西。

我用下面的代码:

image = cv2.imread('test_2.jpg') 
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
edges = cv2.Canny(gray, 100, 250) 
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 25, minLineLength=100, maxLineGap=50) 

hough = np.zeros(image.shape, np.uint8) 

for line in lines: 
    x1, y1, x2, y2 = line[0] 
    cv2.line(hough, (x1, y1), (x2, y2), (255, 255, 255), 2) 

cv2.imwrite('hough.jpg', hough) 

而且我得到了在最后的台词:

hough.jpg

有没有我可以使用,这将有助于我什么概念呢?

我试着改变CannyHoughLinesP不同的参数调用,但它似乎没有帮助。

编辑:我试图检测图片上的所有线条。 3条水平线以及所有垂直线(交叉或仅在水平线的顶部)以及倾斜线。 我的主要问题是一些垂直线没有出现,并且每条线都有两条线,而不是一条线,这正是我需要的。 我想我可以轻松处理双线问题,但我不知道如何处理缺失的线条。

+0

你没告诉我们你想要的结果是什么。 –

+0

对不起,这似乎很明显。我编辑了我的帖子来解释它。 –

回答

1

霍夫正在寻找边缘,而你有山脊。这解释了双线。

由于您的图像易于二值化,因此您可以尝试边缘细化。你会得到很好的连续的像素,你可以从中推断出线段。但是,你可能不得不“修复”那些长长的队伍。

enter image description here

+0

谢谢,我会看看什么是细线。 –

+0

@Yves Daoust你有上图的代码吗? – Link

+1

@链接:对不起,这是用商业软件制作的。你可以在这里找到细化的实现:https://github.com/erich666/GraphicsGems/blob/master/gemsiv/thin_image.c –