You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DINOv2生成图像分割蒙版后保存全黑的问题求助

DINOv2分割蒙版可视化正常但保存后全黑问题解决

问题描述

使用DINOv2模型开展图像分割任务,基于patch embeddings生成蒙版。可视化时蒙版能正常显示,但保存为PNG或JPG格式后全部变为黑色,尝试转为RGB等方法仍无法解决。

相关代码

import numpy as np
import torch.nn.functional as F
ans=[]
masks=[]
for idx,(image,_) in enumerate(trainloader):
    seg=segmentor(1)
    x=seg.forward(layerpatches)
    print(f"mask image shape:{x.shape}")
    for i in range(x.shape[0]):
        image_array = x[i].detach().squeeze().numpy()
        mask_image = image_array
        image=image.permute(0,2,3,1).squeeze()
        fig, ax = plt.subplots(1, 2, figsize=(10, 5))
        ax[0].imshow(mask_image)
        ax[0].set_title('Mask')
        ax[0].axis('off')
        ax[1].imshow(image)
        ax[1].set_title('Corresponding Image')
        ax[1].axis('off')
        plt.show()
        mask_name = f"{img_name[idx]}_mask.jpg"
        mask_np = np.clip(mask_rgb, 0, 255).astype(np.uint8)
        # # Save the adjusted mask as PNG
        mask_path = os.path.join(mask_dir, mask_name)
        cv2.imwrite(mask_path,mask_image)
    break

现象对比

  • 可视化状态:蒙版与对应图像显示正常,蒙版细节清晰可见
  • 保存后状态:蒙版文件全部显示为黑色,无任何有效内容

问题原因及解决方法

核心原因

plt.imshow会自动将蒙版的数值范围归一化到0-1区间进行显示,但cv2.imwrite要求输入的图像数据必须是0-255范围的uint8类型。代码中直接保存模型输出的原始数组(通常是浮点数,范围并非0-255),导致保存后无法正常显示。此外代码中mask_rgb未定义,且处理后的mask_np并未实际用于保存,逻辑存在无效环节。

修改方案

对蒙版数组进行数值归一化和类型转换后再保存,替换原代码中的保存逻辑:

# 替换原保存代码段
mask_name = f"{img_name[idx]}_mask.jpg"
# 1. 归一化蒙版数值到0-1范围(适配任意范围的模型输出)
mask_normalized = (mask_image - mask_image.min()) / (mask_image.max() - mask_image.min())
# 2. 转换为0-255的uint8类型
mask_uint8 = (mask_normalized * 255).astype(np.uint8)
# 3. 保存蒙版
mask_path = os.path.join(mask_dir, mask_name)
cv2.imwrite(mask_path, mask_uint8)

如果蒙版是二值分割结果(仅区分前景/背景),可直接用阈值处理:

# 假设阈值为0.5,根据模型输出实际情况调整
mask_binary = (mask_image > 0.5).astype(np.uint8) * 255
cv2.imwrite(mask_path, mask_binary)

内容的提问来源于stack exchange,提问作者user436524

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:47:37