从OpenCv中的图像中提取墙

时间:2018-05-27 09:11:28

标签: python numpy opencv computer-vision

我有以下迷宫图片:

输入:

image

墙壁是白色的,路径是黑色的。如何在opencv中的单独图像中提取其中一个墙?

这是我想要的输出

输出:

Output

1 个答案:

答案 0 :(得分:2)

您可以使用flood fill algorithm的概念来解决此问题。

在输入图像中,请注意“墙壁”是如何区分的,并且与黑色像素(路径)相邻。当您在此“墙”内的任何一个像素处初始化算法时,它们将与图像的其余部分分开。

<强>代码:

path = r'C:\Users\Desktop'
filename = 'input.png'

img = cv2.imread(os.path.join(path, filename))
cv2.imshow('Original', img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 100, 255,cv2.THRESH_BINARY_INV)
cv2.imshow('thresh1', thresh)

enter image description here

im_floodfill = thresh.copy()

h, w = thresh.shape[:2]
mask = np.zeros((h+2, w+2), np.uint8)

cv2.floodFill(im_floodfill, mask, (0,0), 255)
cv2.imshow('im_floodfill', im_floodfill)

enter image description here

cv2.imshow('fin', cv2.bitwise_not(cv2.bitwise_not(im_floodfill) + thresh))

enter image description here

THIS POST

上还有另一个详细介绍此功能的例子