По сути, вам просто нужно правильно использовать метод 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()
Некоторое входное изображение:
Генерируемый выход:
Надеюсь, что поможет!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
NumPy: 1.18.1
OpenCV: 4.1.2
----------------------------------------