numpy转PIL.Image: 保存Mask图像为单通道的彩色/灰度图colormap.png
从语义分割数据集说起
8位彩色图
下图是 NYU数据集 里的一张Mask图像, 显示彩图, 但实际是单通道位深为8的png图像, 也就是单通道图像, 并不是常见的RGB三通道.
而这种图像怎么读取呢? 用opencv读取显然是行不通的, 这点在另一篇博客有过介绍, 因为改变了图像的像素值和格式, 参考在深度学习中遇到的opencv坑.
推荐使用PIL.Image.open()
读取. 可以看到像素值在 [0, 255] 之间, 矩阵仍然是二维单通道.
再看一下具体的像素值, 可以通过统计元素的方法得到: (参考在深度学习中遇到的opencv坑)px = [255, 7, 0, 37, 39, 6, 25, 4, 28]
这些值也是实例类别的标签!!! 因此不能使用opencv读取, 不能被改变.
8位灰度图
下图是 GTEA 数据集中的一张Mask图像, 显示为灰度图, 实际也是单通道 位深为8的png图像
使用PIL.Image.open()
读取. 可以看到像素值在 [0, 255] 之间, 矩阵仍然是二维单通道.
统计具体的像素值, 只有两个:px = [0, 200]
对于二值Mask图像来说, 这种情况是需要处理的, 可以读取该数据集的其他图像, 能够看出像素值并不统一, 而分割只有两种: 手和背景. 因此需要将图像标签处理为 0/1, 本文讨论的重点就是如何处理这类不规则格式的Mask图像
1位灰度图
下图是 HandOverFace数据集的一张图像, 显示为二值图, 实际是单通道 位深为1的png图像, 这个格式就比较统一, 但仍然存在麻烦.
使用PIL.Image.open()
读取. 可以看到像素值是bool型, 矩阵是二维单通道.
这种数据集仍然需要处理.