霍夫直线会把一条直线的上下边缘编程两条直线,如果只是想要一条直线而且长度和原图像一样,有什么方法吗?

霍夫直线会把一条直线的上下边缘编程两条直线,如果只是想要一条直线而且长度和原图像一样,有什么方法吗?

霍夫直线会出现两条线而且无线延长,怎么让他长度变短,并且变一条?

请问题主是调用的OpenCV还是自己写的转换?如果是调用的OpenCV,有一个maxLineGap参数:同一方向上两条线段判定为一条线段的最大允许间隔(断裂),超过了设定值,则把两条线段当成一条线段,值越大,允许线段上的断裂越大,越有可能检出潜在的直线段

https://blog.csdn.net/dcrmg/article/details/78880046

以及官网推荐使用cv2.HoughLinesP()


> Best thing is that, it directly returns the two endpoints of lines. In previous case, you got only the parameters of

> lines, and you had to find all the points. Here, everything is direct and simple.


import cv2
import numpy as np

img = cv2.imread('dave.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)

cv2.imwrite('houghlines5.jpg',img)



https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html

不是这个意思,这个都能做,霍夫直线会把一条直线检测出两条直线,我只想要一条怎么做?HoughLinesP用不了~直线都检测不全


那样的话,在转换空间之后,选择曲线交点的时候设置一个判断条件:

如果 选取了一点

则 附近的半径为 r 以内的点不再选取


或者更好一些的解决办法我猜想是:

如果 n 个点之间的间隔小于 ε

则将 n 个点的坐标取平均,得到一个点

提高极坐标空间的坐标精度,例如原本以r=1,theta=1°为步进,现在可以以r=0.1,theta=0.1.相当于把空间分割得更密了

大哥,没看到你的回复啊

r是像素吧,最小等于1,不能设成0.1的吧


这是r的推导公式,你可以试试提高精度看看是否有效,我没有试过。

你也可以试着先对原图像进行腐蚀处理,将粗线条变细。这样效果会好点