使用opencv去除弧并完成矩形

时间:2019-02-24 17:47:19

标签: python-3.x opencv image-processing

我正在使用OpenCV将给定图像转换为结果图像,如所附图像所示。我使用Highline来检测边缘,但无法完成矩形/正方形并移除圆弧。

enter image description here

这是原始图像。 Original Image

这是我使用腐蚀和膨胀实现的。 enter image description here

2 个答案:

答案 0 :(得分:0)

您将要识别线段端点的(x,y)。

在源图像上运行Sobel或sepFilter2D以分别拾取垂直边缘和水平边缘。您也可以使用HoughCircles定位和消除门弧。过滤器会将三条平行线变成一条粗线肯定会帮助您处理窗户。

给出一组具有(大约)x,y标签的线段,标识接近于共线并且具有与门对应的适当大小的间隙的线段对。合并它们,填补空白。将片段渲染到空白图像或原始图像的褪色版本上。

答案 1 :(得分:0)

我没有首先将其发布为答案,因为我认为它不是完整的,但是正如您在注释中要求输入代码的地方一样,

import cv2
import numpy as np

img = cv2.imread("room.png", 0)
cv2.imshow("original", img)

kernel = np.ones((4,4),np.uint8)
dilation = cv2.dilate(img,kernel,iterations = 1)
cv2.imshow("dilated", dilation)

ret, thresh = cv2.threshold(dilation, 150, 255, cv2.THRESH_BINARY)
cv2.imshow("thresholded", thresh)

这只是基本的扩张,它利用了稀释的黑色细线会变成灰色的事实,因此我可以应用阈值。

结果: result

当然,您可以稍微调整一下参数,以获得更好的结果,但是用这种方式不会获得预期的结果。