OpenCV& Python - 将特定颜色设置为图像区域

时间:2018-01-02 13:09:18

标签: python opencv

我正在使用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)

如何将图像的这个区域设置为我想要的颜色?

2 个答案:

答案 0 :(得分:1)

您可以使用:

if(getIntent().getExtras()!=null)
{
    String a=getIntent().getStringExtra("data").toString();
}

答案 1 :(得分:1)

切片方法工作正常,但您需要创建valid imagemask_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可以是listtuple

blank_image = np.zeros((height, width, 3), np.uint8)