在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中屏蔽图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中屏蔽/剪辑图像的底部?

在自动布局和尺寸类中屏蔽图像

Matlab - 如何使用二值图像屏蔽 3-D 图像

如何在iOS中将方形图像屏蔽为圆角图像?

在 C# 中使用多线程屏蔽/过滤图像(Windows 窗体应用程序)

如何在 iOS 中屏蔽 UIViews