Houghlines 无法找到清晰可见的单线

问题描述

下面是我用来获取图像中人眼清晰可见的垂直线的代码。角度已设置为 3 弧度到 3.3 弧度,因此它仅检测垂直线。 我的另一个问题是如何正确检测线的端点。我尝试了 EqualizeHist 和 AdaptiveThreshold,但似乎一切都搞砸了我拥有的图像。

sobelx_c = cv2.sobel(image,cv2.CV_8UC1,1,ksize=1)
minLineLength,maxLineGap = 30,5
lines = cv2.houghlines(sobelx_c,np.pi/180,185,minLineLength,maxLineGap)
list_to_write = []
im = img.copy()

# norm_difference is to make sure similar lines dont get repeated.
def norm_difference(xs,ys):
    return sum(abs(x-y) for x,y in zip(xs,ys)) > 5

if lines is not None:
    for i in range(0,len(lines)):
        rho = lines[i][0][0]
        theta = lines[i][0][1]
        if (theta<3.3 and theta>3):
          var = [90 - np.rad2deg(theta),rho]
          if all(norm_difference(var,other) for other in list_to_write):
            list_to_write.append(var)
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a * rho
            y0 = b * rho
            pt1 = (int(x0 + 1000*(-b)),int(y0 + 1000*(a)))
            pt2 = (int(x0 - 1000*(-b)),int(y0 - 1000*(a)))
            print(pt1,pt2)
            cv2.line(im,pt1,pt2,(0,255,0),3)


write_into_txt("lines.txt",list_to_write)
cv2.imwrite('lines.jpg',im)

这是图片A single white vertical line in the grayscale image can be seen

不幸的是,这些是它在真实图像上检测到的线条: The edge of the square should have been detected as sobel in the x direction was used

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...