在Python中使用open执行轮廓检测后,如何使图像的背景变黑?

时间:2019-04-09 11:44:36

标签: python opencv opencv-contour

我已经使用opencv python检测到图像的轮廓,现在我应该在轮廓外涂黑图像。有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

给出找到的轮廓,使用drawContours创建一个二进制蒙版,其中填充了轮廓。根据您的操作方式(黑色图像,白色轮廓与白色图像,黑色轮廓),将输入图像中的所有像素都设置为0(对于蒙版(或非蒙版)像素)。有关可视化,请参见以下代码片段:

import cv2
import numpy as np

# Artificial input
input = np.uint8(128 * np.ones((200, 100, 3)))
cv2.rectangle(input, (10, 10), (40, 60), (255, 240, 172), cv2.FILLED)
cv2.circle(input, (70, 100), 20, (172, 172, 255), cv2.FILLED)

# Input to grayscale
gray = cv2.cvtColor(input, cv2.COLOR_RGB2GRAY)

# Simple binary threshold
_, gray = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)

# Find contours
cnts, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

# Generate mask
mask = np.ones(gray.shape)
mask = cv2.drawContours(mask, cnts, -1, 0, cv2.FILLED)

# Generate output
output = input.copy()
output[mask.astype(np.bool), :] = 0

cv2.imwrite("images/input.png", input)
cv2.imwrite("images/mask.png", np.uint8(255 * mask))
cv2.imwrite("images/output.png", output)

人工输入图片:

Input

在处理过程中生成的遮罩:

Mask

最终输出:

Output