使用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
相关产品推荐
相关产品推荐

