无法同时使用cv2和numpy向图像添加蒙版

问题描述 投票:0回答:1

这是原始图像:

plt.imshow(new_image)

enter image description here

此数组是由语义分割模型生成的:

print(image_mask)

array([[2, 2, 2, ..., 7, 7, 7],
       [2, 2, 2, ..., 7, 7, 7],
       [2, 2, 2, ..., 7, 7, 7],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])

[当使用matplotlib将其绘制为图像时,它会添加假色并生成图像:

plt.imshow(image_mask)

enter image description here

将其更改为我所做的图像:

image_mask_copy = image_mask.copy()
np.place(image_mask_copy,image_mask_copy!=15,[0]) # REMOVE ALL EXCEPT PEOPLE, == 0
np.place(image_mask_copy,image_mask_copy==15,[255]) # MAKE PEOPLE == 255
new_image_mask = np.expand_dims(image_mask_copy,-1)*np.ones((1,1,3))
plt.imshow(new_image_mask)

enter image description here

但是当我尝试执行cv2.bitwise_and时,我又得到了原始图像,而不是只有人的图像...:

new_image = cv2.bitwise_and(image,image,new_image_mask)
plt.imshow(new_image)

enter image description here

当我尝试numpy时,我得到了面具。:

image_mask_copy = image_mask.copy()
np.place(image_mask_copy,image_mask_copy!=15,[0])
np.place(image_mask_copy,image_mask_copy==15,[1]) #NOTICE 1 NOT 255

new_image = np.multiply(new_image_mask,image)
plt.imshow(new_image)

enter image description here

我不明白为什么会这样...请帮助

python numpy image-processing mask cv2
1个回答
0
投票
bitwise_and takes 3 arguments. cv2.bitwise_and(src1, src2, mask)

并且为掩码中!= 0的每个像素计算src1和src2的bitwise_and。

https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html

尝试

new_image = cv2.bitwise_and(image,new_image_mask)
plt.imshow(new_image)

而不是

new_image = cv2.bitwise_and(image,image,new_image_mask)
plt.imshow(new_image)
© www.soinside.com 2019 - 2024. All rights reserved.