python - 如何从网络摄像头 OpenCV 裁剪圆形图像并删除背景

标签 python image opencv image-processing object-detection

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

例如:

enter image description here

到此enter image description here

如何用Python实现?

最佳答案

这个想法是创建一个黑色蒙版,然后使用cv2.circle()绘制所需区域以将其裁剪为白色。从那里我们可以将cv2.bitwise_and()与原始图像和掩模一起使用。要裁剪结果,我们可以在掩模上使用 cv2.boundingRect() 来获取 ROI,然后使用 Numpy 切片来提取结果。在本示例中,我将中心点用作 (335, 245)。您可以调整圆半径来增大或减小圆的大小。

enter image description here

代码

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()

关于python - 如何从网络摄像头 OpenCV 裁剪圆形图像并删除背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60118622/

相关文章:

python - 无法在 Linux 上导入 Python 包

html - 在图像链接上获得一些空间

javascript - 逐步加载幻灯片: Some images don't load or only load partially and quit

c - OpenCV:缓冲 IplImage* 以在 pthreads 之间共享

python - 如何使用 Mongrel2 提供 WSGI Python 应用程序?

python - 监控 PI 上的两个 GPIO 引脚

html - 图像作为 HTML <img> 可以正常工作,但在 CSS background-image 上却不行 我缺少什么?

c++ - 加速 OpticalFlow 算法 - OpenCV

python3 : Cannot Import cv2 : DLL load failed after installing opencv_contrib modules

python - 使用接口(interface)在 Windows 上将 python 脚本作为服务运行