问题描述
这个程序的目的是绘制房间的角落和边缘,这是我现在所处的位置:
右上角的图像是我的结果,左上角的图像是我的输入。目前,我正在使用带有高斯滤波器的精明边缘检测。但是正如您所看到的,有很多来自图像中其他细节的随机线条。我的目标是:
到目前为止,我已经尝试过, 只显示平坦的线(0 或无限斜率):
if lines is not None:
for line in lines:
x1,y1,x2,y2 = line[0]
if math.isclose(x1,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,y2 = line[0]
if y1 > 100 and y2 > 100:
cv2.line(bgrimg,1)
这有点适用于顶部,但由于侧面可能位于图片中的任何位置,我无法确定它们的确切位置。
有没有办法解决这个问题?如果没有,机器学习有可能吗?
解决方法
从Canny得到的信息说起。可以:
1 - 确定水平线的良好参考,
2 - 确定正确的对角线参考
3 - 确定左对角线的良好参考
4 - 从这些参考线的延伸中,您可以找到交点。
有些交叉点会很好,有些则不好。
如果水平参考线和斜参考线所成的角度在左右两侧相同或相似,则是一个很好的交集。
如我在此处添加的图片所示: https://i.stack.imgur.com/OYS2c.png