Python 使用遮罩创建彩色背景-在遮罩为真的情况下无法指定3个输入值时出现错误
我正试图创建一个RGB背景颜色周围的头部,我已蒙面Python 使用遮罩创建彩色背景-在遮罩为真的情况下无法指定3个输入值时出现错误,python,numpy,opencv,Python,Numpy,Opencv,我正试图创建一个RGB背景颜色周围的头部,我已蒙面 mask = np.ones(image.shape) mask = cv2.drawContours(mask, [c], -1, 0, cv2.FILLED) output = image.copy() output[mask != 0] = (255,0,0) 但我得到了以下错误: ValueError: NumPy boolean array indexing assignment cannot assign 3 input va
mask = np.ones(image.shape)
mask = cv2.drawContours(mask, [c], -1, 0, cv2.FILLED)
output = image.copy()
output[mask != 0] = (255,0,0)
但我得到了以下错误:
ValueError: NumPy boolean array indexing assignment cannot assign 3 input values to the 143184 output values where the mask is true
当使用单个输入时,它工作:
mask = np.ones(image.shape)
mask = cv2.drawContours(mask, [c], -1, 0, cv2.FILLED)
output = image.copy()
output[mask != 0] = 0
并给出正确的掩蔽:
然而,我理想情况下希望背景是红色的,这样当我以后使背景透明时,它不会影响脸上的任何东西
非常感谢您的帮助简单回答:制作
mask
单通道
mask = np.ones(image.shape[:2])
说明:
这是因为您的遮罩
与图像
的形状相同,并且您试图用三个值替换每个值。若要每三个值替换一个值,则应构建一个查询,该查询将为每个操作提供三个值的访问权限
在代码中,输出[mask!=0]=anything
放置anything
,而不是每个通道的每个值,但前提是它符合形状
假设您的图像是400x300像素RGB(或BGR,任何有3个通道的图像),那么它的形状是400x300x3。由于遮罩的形状相同,因此条件
mask!=0
指向每个通道的每个值。当遮罩为单通道时,条件完全指向每个像素,然后您可以用3个所需的值替换3个现有值(仍保持形状)。非常感谢您,这是有效的,您的解释清楚地解释了我的错误所在。