Как затемнить фон изображения после определения контура с помощью open в Python? - PullRequest
0 голосов
/ 09 апреля 2019

Я обнаружил контуры для изображения с помощью OpenCV Python, теперь я должен затемнить изображение за пределами контура. Может ли кто-нибудь помочь мне сделать это?

1 Ответ

2 голосов
/ 09 апреля 2019

Учитывая ваши найденные контуры, используйте 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...