我正在尝试在被遮盖的头部周围创建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 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
并提供正确的遮罩:
但是,理想情况下,我希望将背景设置为红色,以便以后再使背景透明时,不会影响脸部任何东西。
非常感谢您的帮助
答案 0 :(得分:1)
简单的答案:将mask
单通道化。
mask = np.ones(image.shape[:2])
说明:
这是因为您的mask
与image
的形状相同,并且您尝试将每个值替换为三个。如果要替换每三个值,则应构建查询以允许每个操作访问三个。
在您的代码中,output[mask != 0] = anything
放置anything
而不是每个通道的每个值,但前提是要适合形状。
假设您的图片是400x300 px RGB(或BGR,具有3个通道的任何图片),因此其形状为400x300x3。由于遮罩的形状相同,因此条件mask != 0
指向每个通道的每个值。当遮罩为单通道时,条件将完全指向每个像素,然后可以将3个现有值替换为3个所需的值(仍保持形状)。