【发布时间】:2021-04-08 17:08:41
【问题描述】:
这个程序的目的是绘制房间的角落和边缘,这就是我现在所处的位置: 右上角的图像是我的结果,左上角的图像是我的输入。目前,我正在使用带有高斯滤波器的精明边缘检测。但正如你所看到的,图像中有很多来自其他细节的随机线条。
我的目标是:
到目前为止,我已经尝试过, 仅显示平坦的线(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)
这有点适用于顶部,但由于侧面可能在图片中的任何位置,我无法确定它们的确切位置。
有没有办法解决这个问题?如果没有,机器学习可以吗?
【问题讨论】:
-
我认为主要问题是墙壁上的阴影。您可以尝试调整图像的对比度。但最后更好的方法是手动设置角落,教软件如何识别何时重要,何时不重要。可能房间都差不多。是箱子。找到上角然后垂直线是它的结果。
标签: python opencv hough-transform canny-operator gaussianblur