【问题标题】:How to crop circle image from webcam OpenCV and remove background如何从网络摄像头 OpenCV 裁剪圆形图像并删除背景
【发布时间】:2020-05-23 21:29:40
【问题描述】:

我正在应用过滤器。通过使用 OpenCv 实时网络摄像头是打开的,它检测面部并应用过滤器。但我想将脸部裁剪成圆形并删除多余的背景并保存图像。

例如:

到这个

如何在 python 中实现?

【问题讨论】:

标签: python image opencv image-processing object-detection


【解决方案1】:

这个想法是创建一个黑色蒙版,然后使用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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多