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

时间:2020-01-23 08:00:45

标签: python opencv image-processing

我想裁剪图像的圆形区域(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)

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

图片的尺寸为:1280x1024。

1 个答案:

答案 0 :(得分:1)

基本上,您只需要正确使用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
----------------------------------------