首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCV&Python -将特定颜色设置为图像区域

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

Stack Overflow用户
提问于 2018-01-02 21:09:18
回答 2查看 1.1K关注 0票数 1

我正在使用OpenCV和Python。我正在检测人脸图像中的人脸,我聚焦在图像中的人脸区域,并创建一个(零的)蒙版,我想在人脸区域填充白色(或任何颜色)。我的源码如下:

代码语言:javascript
复制
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]

然而,我得到了以下错误:

代码语言:javascript
复制
  mask_face[y:y + h, x:x + w] = [255, 255, 255]
ValueError: could not broadcast input array from shape (3) into shape (462,462)

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

EN

Stack Overflow用户

发布于 2018-01-02 21:24:34

切片方法很好,但您需要创建一个valid imagemask_face需要是一个rgb image

代码语言:javascript
复制
mask_face = np.zeros(RGB_img.shape[:2] + (3,), np.uint8)

然后,您可以使用切片方法或仅绘制一个矩形,如Maxime Guinin answer

更新以改进答案。

RGB图像是具有3个维度(高度、宽度和颜色通道)的多维数组,因此,当您创建mask_face时,您错过了颜色通道,然后使用+ (3,)添加这个。这就像创建了空白rgb_image一样,第一个参数可以是listtuple

代码语言:javascript
复制
blank_image = np.zeros((height, width, 3), np.uint8)
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48061623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档