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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?