如何使用 numpy 读取灰度蒙版图像?

Posted

技术标签:

【中文标题】如何使用 numpy 读取灰度蒙版图像?【英文标题】:How to how to read grayscale mask image using numpy? 【发布时间】:2021-06-02 02:55:39 【问题描述】:

我正在阅读某人关于语义分割的代码尝试学习一些技术,但我可以找出一个我真的需要解释的特定部分 这是整个函数

def DataGen():
    img_ = []
    mask_ = []
    c1 = []
    y1 = []
    for i in range(len(image_)):
        image = cv2.imread(image_[i])
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        image = image / 255
        image = cv2.resize(image, (height, width), interpolation=cv2.INTER_AREA)  # image
        cc1 = cv2.resize(image, (height // 2, width // 2), interpolation=cv2.INTER_AREA)  # resize image

        mask = cv2.imread(mask_id[i], 0)
        mask[np.where(mask == 0)] = 198
        target = np.zeros([966, 1296, 2])

        target[:, :, 1][np.where(mask == 149)] = 1
        target[:, :, 0][np.where(mask == 76)] = 1

        mask = cv2.resize(target, (height, width), interpolation=cv2.INTER_AREA)
        yy1 = cv2.resize(target, (height // 2, width // 2), interpolation=cv2.INTER_AREA)
        mask = np.expand_dims(mask, axis=-1)
        print(mask)
        yy1 = np.expand_dims(yy1, axis=-1)
        img_.append(image)
        mask_.append(mask)
        c1.append(cc1)
        y1.append(yy1)
    img_ = np.array(img_)
    C1 = np.array(c1)
    Y1 = np.array(y1)
    mask_ = np.array(mask_)
    mask_[np.where(mask_ != 0)] = 1
    Y1[np.where(Y1 != 0)] = 1
    return img_, C1, mask_, Y1

这是我有点困惑的地方

mask = cv2.imread(mask_id[i], 0) # mask is read in grayscale Point-1
mask[np.where(mask == 0)] = 198

target = np.zeros([966, 1296, 2]) # numpy is define Point-2
target[:, :, 1][np.where(mask == 149)] = 1
target[:, :, 0][np.where(mask == 76)] = 1

mask = cv2.resize(target, (height, width), interpolation=cv2.INTER_AREA)

掩码如何进入Point-2中初始化的目标变量中的numpy数组?

【问题讨论】:

在你尝试向谁学习时可能会更有选择性...有人可能会费心评论他们的代码并使用正确、已定义、易读、免维护的常量,如 cv2.IMREAD_GRAYSCALE而不是像 cv2.imread() 中的 0 这样丑陋的清单常量,这让您不知道它们的用途。 是的,你是对的,不管怎样,除了这个之外,我也能够理解代码的所有其他部分。 【参考方案1】:

我早就想明白了,所以我决定回答它......也许它会帮助别人。

`target[:, :, 1][np.where(mask == 149)] = 1

目标[:, :, 0][np.where(mask == 76)] = 1 `

这个“np.where(mask == 149)”可以简单地被删除并替换为任何整数值作为索引。作者从 MxN 掩码图像数组中选择该索引并设置它。它只是一个 numpy 中的变量声明,可以重写为

` 目标 = np.zeros([966, 1296, 2])

目标[:, :, 1][100] = 1

目标[:, :, 0][75] = 1 `

【讨论】:

以上是关于如何使用 numpy 读取灰度蒙版图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在蒙版图像上进行基于网格(密集)的光流?

如何使 svg 蒙版图像与 Internet Explorer 兼容

底部带有三角形的蒙版图像

如何传递 RGB 信息来对图像进行阈值处理

如何将使用 Mask Rcnn 在自定义对象检测上创建蒙版图像的 Keras 模型转换为 CoreML 模型以在 iOS 应用程序中使用?

错误:无法从名为“AppIconMask.png”的图像以 2.0 比例创建图标蒙版图像