通过python打开OpenCV:有一种快速的方法可以将一组矩形外的像素归零吗?

Mik*_*nce 10 python opencv

我有一张脸的图像,我用haar级联来检测嘴,鼻子和每只眼睛的位置(x,y,宽度,高度).我想将这些区域外的所有像素设置为零.这样做的最快(计算)方式是什么?我最终会实时对视频帧进行操作.

Abi*_*n K 17

我不知道这是否是最快的方式,但这是一种方法.

创建一个面部区域为白色的蒙版图像,然后对原始图像和蒙版图像应用bitwise_and函数.

x = y = 30
w = h = 100

mask = np.zeros(img.shape[:2],np.uint8)
mask[y:y+h,x:x+w] = 255
res = cv2.bitwise_and(img,img,mask = mask)
Run Code Online (Sandbox Code Playgroud)

它将0.16 ms我的系统(核心i5,4GB RAM)用于尺寸为400x300的图像

编辑 - 更好的方法:你不需要像上面那样做.只需创建一个零图像,然后将ROI从原始图像复制到零图像.就这样.

mask = np.zeros(img.shape,np.uint8)
mask[y:y+h,x:x+w] = img[y:y+h,x:x+w]
Run Code Online (Sandbox Code Playgroud)

只有0.032 ms在我的系统中才能获得上述参数5 times faster.

结果:

输入图片:

在此输入图像描述

输出:

在此输入图像描述