Как обрезать круговое изображение с веб-камеры OpenCV и удалить фон - PullRequest
2 голосов
/ 07 февраля 2020

Я применяю фильтр. С помощью OpenCv живая веб-камера открыта, и она обнаруживает лицо и применяет фильтр. Но я хочу обрезать лицо по кругу, убрать лишний фон и сохранить изображение.

, например:

enter image description here

в это enter image description here

Как я могу реализовать в python?

1 Ответ

2 голосов
/ 08 февраля 2020

Идея состоит в том, чтобы создать черную маску, а затем нарисовать желаемую область для обрезки белым цветом, используя cv2.circle(). Оттуда мы можем использовать cv2.bitwise_and() с исходным изображением и маской. Чтобы обрезать результат, мы можем использовать cv2.boundingRect() на маске для получения ROI, а затем использовать Numpy срезы для извлечения результата. Для этого примера я использовал центральную точку как (335, 245). Вы можете настроить радиус круга для увеличения или уменьшения размера круга.

enter image description here

Код

import cv2
import numpy as np

# Create mask and draw circle onto mask
image = cv2.imread('1.jpg')
mask = np.zeros(image.shape, dtype=np.uint8)
x,y = 335, 245
cv2.circle(mask, (x,y), 110, (255,255,255), -1)

# Bitwise-and for ROI
ROI = cv2.bitwise_and(image, mask)

# Crop mask and turn background white
mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
x,y,w,h = cv2.boundingRect(mask)
result = ROI[y:y+h,x:x+w]
mask = mask[y:y+h,x:x+w]
result[mask==0] = (255,255,255)

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