实例分割---非循环、快速替换numpy数组中的布尔值

使用非循环方法快速替换numpy二维数组的布尔值元素

实例分割任务是目标检测任务和语义分割任务的结合,需要同时完成实例级和像素级的预测,既要区分视频中不同的目标个体,又要目标轮廓进行精细分割,是一个复杂且有挑战性的任务。

实例分割---非循环、快速替换numpy数组中的布尔值_第1张图片

通过实例分割得到的输出结果,包含图像中像素是否属于目标的一个矩阵,该mask是由一个二维的布尔型数组组成,如下所示。

其中,False 表示背景像素,True 表示目标像素。

实例分割---非循环、快速替换numpy数组中的布尔值_第2张图片

我们考虑把这个布尔型数组变成灰度图,将 False 修改为255,作为黑色背景;将True 修改为0,作为白色目标。结果如下所示。

实例分割---非循环、快速替换numpy数组中的布尔值_第3张图片

那么,问题来了,如何操作呢?

方法一

使用 for 循环,思路清晰,简单暴力!

 for x in range(len(mask[0])):
     for y in range(len(mask[1]):
        if mask[x, y] == False:
            np_img[x, y] = 0
        else:
            np_img[x, y] = 255

此方法可以实现目标,但是速度非常慢,经测验在1080*720的数组上,运行速度为0.9s。

方法二

使用数学运算符直接实现,非常简单,一行代码即可实现!

mask = np.uint8(mask*255)

其中,True × 255 = 255, False × 255 = 0

在这里插入图片描述

如果 TrueFalse 是反着的,只需使用逻辑非运算符,将 TrueFalse 取反即可!

mask = ~mask
mask = np.uint8(mask*255)

此方法可以实现目标,并且速度非常快,经测验在1080*720的数组上,运行速度为0.002s。

方法二比方法一的速度快450倍,非常方便!

日常学习记录,一起交流讨论吧!侵权联系~

你可能感兴趣的:(日常记录,python,numpy,深度学习)