Размытие определенной части изображения - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть изображение. Как это:

enter image description here

Я обнаружил объект (в данном случае это человек), и он маскирует изображение следующим образом:

enter image description here

Я хочу, чтобы фон объекта был размытым. Как это:

enter image description here

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

import cv2
import numpy as np
from matplotlib import pyplot as plt
import os


path = 'selfies\\'
selfImgs = os.listdir(path)


for image in selfImgs:

    img = cv2.imread(path+image)
    img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    blur = cv2.blur(img,(10,10))
    #canny = cv2.Canny(blur, 10, 30)

    #plt.imshow(canny)
    plt.imshow(blur)

    j=cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)
    print(image)
    cv2.imwrite('blurred\\'+image+".jpg",j)

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

Этот проект основан на https://github.com/matterport/Mask_RCNN

При необходимости могу предоставить больше информации.

У меня есть подход в numpy: -

final_image = original * mask + blurred * (1-mask)

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете использовать метод np.where(), чтобы выбрать пиксели, в которых вы хотите получить размытые значения, а затем заменить их на:

import cv2
import numpy as np

img = cv2.imread("/home/user/Downloads/lena.png")
blurred_img = cv2.GaussianBlur(img, (21, 21), 0)

mask = np.zeros((512, 512, 3), dtype=np.uint8)
mask = cv2.circle(mask, (258, 258), 100, np.array([255, 255, 255]), -1)

out = np.where(mask==np.array([255, 255, 255]), img, blurred_img)

cv2.imwrite("./out.png", out)

enter image description here

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