在python中屏蔽图像
Posted
技术标签:
【中文标题】在python中屏蔽图像【英文标题】:mask out the image in python 【发布时间】:2019-10-08 16:25:49 【问题描述】:我有一个二进制掩码和一个相同大小的图像。我想掩盖人类。我使用了np.multiply
,但它给出了如下图,但是,我想要的是人类,而不是白色像素!!:我绘制了蒙版和图像。它们是正常的,但它们的乘法并不像我想象的那样。
import cv2
import os
import numpy as np
masks32x32 = "./DATA/resized_masks/"
images500x500 = "./DATA/resized_imgs/"
masks = os.listdir(masks32x32)
images = os.listdir(images500x500)
for inx, img in enumerate(images):
img_array = cv2.imread(images500x500+img)
mask_array = cv2.imread(masks32x32+img)
mask120x120 = cv2.resize(mask_array,(500,500),interpolation=cv2.INTER_AREA)
mask120x120 = np.divide(mask120x120, 255)
masked_image=np.multiply(img_array, mask120x120)
cv2.imshow("image",masked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
【问题讨论】:
使用cv2.bitwise_and(img_array, img_array, mask=mask120x120)
而不是np.multiply
。
这似乎被错误地标记了。你能添加他正在使用的库吗?
【参考方案1】:
感谢 Abitbol。我使用这个链接解决了这个问题:link
我会在这里发布。也许这对他们有帮助。我更正了代码如下。现在可以正常使用了。
import cv2
import os
import numpy as np
masks32x32 = "./DATA/resized_masks/"
images500x500 = "./DATA/resized_imgs/"
masks = os.listdir(masks32x32)
images = os.listdir(images500x500)
for inx, img in enumerate(images):
img_array = cv2.imread(images500x500+img)
mask_array = cv2.imread(masks32x32+img)
mask500x500 = cv2.resize(mask_array,(500,500),interpolation=cv2.INTER_AREA)
print(mask500x500.shape)
print(img_array.shape)
mask500x500 = cv2.cvtColor(mask500x500, cv2.COLOR_BGR2GRAY)
#mask500x500 = np.divide(mask500x500, 255)
mask500x500 = mask500x500.astype(np.uint8)
masked_image=cv2.bitwise_and(img_array, img_array, mask=mask500x500)
#masked_image=np.multiply(img_array, mask120x120)
cv2.imshow("image",masked_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
【讨论】:
以上是关于在python中屏蔽图像的主要内容,如果未能解决你的问题,请参考以下文章