我正在使用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)
如何将图像的这个区域设置为我想要的颜色?
答案 0 :(得分:1)
您可以使用:
if(getIntent().getExtras()!=null)
{
String a=getIntent().getStringExtra("data").toString();
}
答案 1 :(得分:1)
切片方法工作正常,但您需要创建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
已创建,第一个arg可以是list
或tuple
:
blank_image = np.zeros((height, width, 3), np.uint8)