Обрежьте область круга (ROI) изображения и поместите его на белую маску - PullRequest
0 голосов
/ 23 января 2020

Я хочу обрезать область круга изображения (ROI) и поместить его на белую маску с такими же размерами и позициями.

Построить белую маску:

h, w = img.shape[:2]
mask = np.ones((h,w,3), np.uint8)*255

Область круга (ROI) на изображении (-> это неправильно, потому что это только круг, и я хочу область со всеми пикселями в этом круге и скопировать ее в белый цвет маска):

roi = cv2.circle(img, (656,517), 505, (0,0,0), -1)

Как скопировать все пиксели в круге изображения на маску с одинаковыми размерами и одинаковым положением круга?

Изображение имеет размеры: 1280х1024.

1 Ответ

1 голос
/ 23 января 2020

По сути, вам просто нужно правильно использовать метод OpenCV bitwise_and, т.е. вам нужна дополнительная маска для круговой области интереса. Кроме того, вам нужно два bitwise_and вызова, поскольку вы хотите сохранить белый фон в конечном изображении.

import cv2
import numpy as np

# Original image
image = cv2.imread('path/to/your/image.png')
cv2.imshow('image', image)

# Circular ROI in original image; must be selected via an additional mask
roi = np.zeros(image.shape[:2], np.uint8)
roi = cv2.circle(roi, (175, 125), 100, 255, cv2.FILLED)
cv2.imshow('roi', roi)

# Target image; white background
mask = np.ones_like(image) * 255
cv2.imshow('mask before operation', mask)

# Copy ROI part from original image to target image
mask = cv2.bitwise_and(mask, image, mask=roi) + cv2.bitwise_and(mask, mask, mask=~roi)
cv2.imshow('mask after operation', mask)

cv2.waitKey(0)
cv2.destroyAllWindows()

Некоторое входное изображение:

Input

Генерируемый выход:

Output

Надеюсь, что поможет!

----------------------------------------
System information
----------------------------------------
Platform:  Windows-10-10.0.16299-SP0
Python:    3.8.1
NumPy:     1.18.1
OpenCV:    4.1.2
----------------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...