关于python:裁剪图像的圆圈区域(ROI)并将其放置在白色蒙版上

Crop a circle area (ROI) of an image and put it onto a white mask

我想裁剪图像的圆形区域(ROI),然后将其放置在具有相同尺寸和位置的白色蒙版上。

建立一个白色面具:

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

图像中的圆圈区域(ROI)(->这是错误的,因为它只是一个圆圈,我想要一个在该圆圈中具有所有像素的区域,并将其复制在白色蒙版中):

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

如何将图像圆中的所有像素复制到具有相同尺寸和相同位置的蒙版上?

图片的尺寸为:1280x1024。


基本上,您只需要正确使用OpenCV的bitwise_and方法即可,即,您需要一个用于循环投资回报率的附加遮罩。此外,由于要在最终图像中保持白色背景,因此需要两次bitwise_and调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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

希望有帮助!

1
2
3
4
5
6
7
8
----------------------------------------
System information
----------------------------------------
Platform:  Windows-10-10.0.16299-SP0
Python:    3.8.1
NumPy:     1.18.1
OpenCV:    4.1.2
----------------------------------------