python - 将Detectron2实例分割转换为opencv Mat数组
问题描述
我正在尝试从使用 Detectron2 执行的实例分割输出中获取二进制图像。根据官方文档,掩码的输出格式如下:
“pred_masks”:形状 (N, H, W) 的张量,每个检测到的实例的掩码。
所以我尝试将其转换为 numpy:
mask = outputs["instances"].get("pred_masks").numpy()
输出如下:
[[[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]]
[[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
...
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]]
[[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
...
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]]
...
[[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
...
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]]
[[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
...
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]]
[[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
...
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]]]
但是数据类型是布尔值,所以我添加了以下行以更接近 opencv 格式:
array = (mask > 126) * 255
[[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
...
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]]
这就是我所到之处。我希望能够将每个蒙版单独可视化为 opencv 图像:
cv2.imshow("Mask", mask)
,而无需保存图像。
先感谢您。
解决方案
我希望这将为您的期望提供解决方案
mask_array = outputs['instances'].pred_masks.numpy()
num_instances = mask_array.shape[0]
mask_array = np.moveaxis(mask_array, 0, -1)
mask_array_instance = []
output = np.zeros_like(im) #black
#print('output',output)
for i in range(num_instances):
mask_array_instance.append(mask_array[:, :, i:(i+1)])
output = np.where(mask_array_instance[i] == True, 255, output)
cv2.imwrite(mask_path+'/'+item+'.jpg',output)#mask
推荐阅读
- corda - Corda公证防止双花,如何检查?
- stripe-payments - Python 条纹支付网关
- python - 我该如何解决这个连接错误和类型错误
- react-native - 无法安装 expo-cli 以使用 react-native
- c# - 如何重构这个?^^
- c++ - QGridLayout 标签正在互相书写
- python - 在应用程序上下文之外工作。(Python:烧瓶错误!)
- python - 你如何在 python 中模拟单个文件?
- php - 在 Yii2 Advanced 中使用多用户身份类时,登录后面临身份对象问题
- spring - Spring引导数据jpa @Query本机查询的单元测试用例是否可能?