如何使用opencv python通过hough线变换去除噪声

mfpqipee  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(307)

这个程序的目的是绘制出一个房间的角落和边缘,这里是我现在的位置:

右上角的图像是我的结果,左上角的图像是我的输入。目前,我正在使用canny边缘检测与高斯滤波器。但正如你所看到的,有很多随机线来自于图像中的其他细节。
我的目标是:

到目前为止,我已经尝试过了,只显示平坦的线条(0或无限坡度):

if lines is not None:
    for line in lines:
        x1, y1, x2, y2 = line[0]
        if math.isclose(x1, x2, tol_abs=25) or math.isclose(y1, y2, tol_abs=10):
            cv2.line(bgrimg, (x1, y1), (x2, y2), (0, 255, 0), 1)

但这导致我失去了一些重要的线路。接下来,我尝试只显示图像边缘的线条:

if lines is not None:
    for line in lines:
        x1, y1, x2, y2 = line[0]
        if y1 > 100 and y2 > 100:
            cv2.line(bgrimg, (x1, y1), (x2, y2), (0, 255, 0), 1)

这对顶部有一定的效果,但由于侧面可能在图片中的任何地方,我无法确定它们确切的位置。
有办法解决这个问题吗?如果没有,机器学习有可能吗?

b1payxdu

b1payxdu1#

从坎尼获得的信息开始。可以:
1-确定水平线的良好参考,
2-确定右对角线的良好参考
3-确定左对角线的良好参考
4-从这些参考线的延伸可以找到交点。
有些十字路口是好的,有些是坏的。
如果水平参考线和斜参考线形成的Angular 左右相同或相似,则是一个良好的交点。
正如我在这里添加的图像:https://i.stack.imgur.com/oys2c.png

相关问题