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