Как размыть изображение после получения его маски с помощью opencv? - PullRequest
0 голосов
/ 08 февраля 2019

Я следовал руководству по размытию изображения на основе цветовой сегментации: https://realpython.com/python-opencv-color-spaces/

Но у меня возникли проблемы с размыванием только nemo на исходном изображении.

То, что я так далеко от следования руководству:

import matplotlib.pyplot as plt
import cv2

nemo = cv2.imread('nemo.png')
nemo = cv2.cvtColor(nemo, cv2.COLOR_BGR2RGB)
hsv_nemo = cv2.cvtColor(nemo, cv2.COLOR_RGB2HSV)

light_orange = (1, 190, 200)
dark_orange = (18, 255, 255)
light_white = (0, 0, 200)
dark_white = (145, 60, 255)

mask = cv2.inRange(hsv_nemo, light_orange, dark_orange)
mask_white = cv2.inRange(hsv_nemo, light_white, dark_white)
final_mask = mask + mask_white

final_result = cv2.bitwise_and(nemo, nemo, mask=final_mask)
blur = cv2.blur(final_result, (15, 15), 0)

Я вычеркнул 1) nemo, 2) final_mask и 3) blur для сравненияздесь: Результат изображения

Могу ли я размыть изображение Немо на исходной фотографии так, чтобы оно выглядело примерно так: Размытое исходное фото

На данный момент он только размывает немо на изображении маски.

Я думаю, что мне нужно получить ROI для этого, но как мне сформировать связь между маской и получением координат /ROI Немо из оригинального фото?Спасибо!

1 Ответ

0 голосов
/ 08 февраля 2019

Если вы хотите размыть изображение только там, где маска истинна, то что-то вроде этого должно сработать

blur = cv2.blur(nemo,(15,15),0)
out = nemo.copy()
out[mask>0] = blur[mask>0]

Однако вы можете изменить способ создания маски, поскольку в настоящее время это будет толькоразмыть оранжевую и белую части рыбы.

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