我正在使用OpenCV和Python。我正在检测人脸图像中的人脸,我聚焦在图像中的人脸区域,并创建一个(零的)蒙版,我想在人脸区域填充白色(或任何颜色)。我的源码如下:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('ManWithGlasses.jpg')
RGB_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Detect the face in the image
haar_face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = haar_face_cascade.detectMultiScale(gray_img, scaleFactor=1.1, minNeighbors=8);
mask_face = np.zeros(RGB_img.shape[:2], np.uint8)
# Loop in all detected faces - in our case it is only one
for (x,y,w,h) in faces:
cv2.rectangle(RGB_img,(x,y),(x+w,y+h),(255,0,0), 2)
plt.imshow(RGB_img)
plt.show()
roi_rgb = img[y:y + h, x:x + w]
mask_face[y:y + h, x:x + w] = [255, 255, 255]然而,我得到了以下错误:
mask_face[y:y + h, x:x + w] = [255, 255, 255]
ValueError: could not broadcast input array from shape (3) into shape (462,462)如何将图像的此区域设置为我想要的任何颜色?
发布于 2018-01-02 21:14:41
您可以使用:
mask_face = cv2.rectangle(mask_face, (x,y), (x + w,y + h), (255,255,255), -1)发布于 2018-01-02 21:24:34
切片方法很好,但您需要创建一个valid image,mask_face需要是一个rgb image
mask_face = np.zeros(RGB_img.shape[:2] + (3,), np.uint8)然后,您可以使用切片方法或仅绘制一个矩形,如Maxime Guinin answer
更新以改进答案。
RGB图像是具有3个维度(高度、宽度和颜色通道)的多维数组,因此,当您创建mask_face时,您错过了颜色通道,然后使用+ (3,)添加这个。这就像创建了空白rgb_image一样,第一个参数可以是list或tuple
blank_image = np.zeros((height, width, 3), np.uint8)https://stackoverflow.com/questions/48061623
复制相似问题