Python OpenCV霍夫线未显示

Python OpenCV霍夫线未显示,python,opencv,computer-vision,Python,Opencv,Computer Vision,我正在尝试从下图中获取线条: 我的代码使用以下函数: 进口cv2 线条=cv2.HoughLinesPimage,.1,np.pi/360,10, minLineLength,maxLineGap 其中minLineLength=20,maxLineGap=10。我获得以下信息: 在这种情况下,尽管肉眼可以清楚地看到水平线,但为什么水平线没有显示出来?如果HoughLinesP没有检测到某条线,即使它清晰可见,这是因为该线肯定不符合您的某些标准。最可能是您的minLineLength或max

我正在尝试从下图中获取线条:

我的代码使用以下函数:

进口cv2 线条=cv2.HoughLinesPimage,.1,np.pi/360,10, minLineLength,maxLineGap 其中minLineLength=20,maxLineGap=10。我获得以下信息:

在这种情况下,尽管肉眼可以清楚地看到水平线,但为什么水平线没有显示出来?

如果HoughLinesP没有检测到某条线,即使它清晰可见,这是因为该线肯定不符合您的某些标准。最可能是您的minLineLength或maxLineGap。如果减少这些条件,您将开始检测更多行

另外,正如一些评论所指出的,您的rho参数可能太小了0.1。由于该参数是以像素为单位测量的,因此给它一个非整数值可能会产生意外的结果,请尝试给它一个值1


如果您愿意,您可以从文档中了解这一点,文档中解释并展示了如何使用HoughLines和HoughLinesP

问题在于您用于rho的分辨率

0.1的分辨率非常小。实际上,对于大小为N,N像素的图像,rho的可能值的数量是N*N*sqrt2/rho_分辨率,有时是其两倍,具体取决于角度的定义方式

可能值的数量在Hough累加器中具体化为容器。这个数字越大,图像中的不同像素在同一个存储箱中的累积就越少。对于rho的分辨率,只有一个很小的值,最终会得到一个稀疏累加器,这里和那里都有一些较低的值


将此值提高到1或2像素的分辨率,您会看到更多的有效线出现。

我不确定,但在原始图像中,我看不到任何清晰可见的线。。。你是说没有阈值的图像吗?我相信你上传了错误的图片,请编辑,这样我们可以更好地帮助你。这可能是因为它们没有您指定的minLineLength,可能使用较低的值会检测到它们。这是正确的图像。矩形的上边缘不应该注册为水平hough线吗?像素中的ρ的分辨率太小了。请尝试1而不是0.1。对于较小的值,风险在于您在累加器的任何存储箱中积累的像素不够,无法达到设置为10的阈值。对于像您这样的图像,使用0.1是没有意义的。@Eskapp注释很重要。rho参数是以像素为单位测量的,因此如果给它一些不现实的像素分数,可能会产生意想不到的结果。根据我的建议发布了一个答案,还包括了rho的考虑。