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

使用PIL与cv2打开掩码图像的差异及统一方法

PIL与OpenCV读取掩码图像的差异原因及解决方案

差异原因

  • PIL的Image.open()会严格遵循图像的原始存储通道数:你的msk.png本质是单通道的类别标签图(哪怕视觉上显示为彩色),PIL读取后直接保留单通道结构,转成numpy数组就是二维的单通道标签数组。
  • OpenCV的cv2.imread()默认会把所有图像都转成3通道BGR格式,哪怕原始是单通道灰度图,它也会自动复制通道数据扩展成3通道,所以得到的是三维的数组。

解决方法

要让cv2读取后得到和PIL一致的单通道数组,只需要指定单通道灰度读取模式:

import cv2

# 以单通道灰度模式读取掩码图
img2 = cv2.imread('msk.png', cv2.IMREAD_GRAYSCALE)

如果你的msk.png是伪彩色映射的单通道图,这种方式能直接拿到原始的类别标签数组;如果是真3通道RGB掩码(但每个像素三通道值相同),也可以读取后提取任意一个通道,比如img2 = cv2.imread('msk.png')[:, :, 0],不过用灰度模式读取更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:52:05