labelme生成的PNG单通道图片显示彩色原因
PNG支持索引图像
PNG支持索引图。所谓索引图,就是带调色盘(palette),调色盘内定义了若干颜色。
索引图像的文件结构比较复杂,除了存放图像的二维矩阵外,还包括一个称之为颜色索引矩阵MAP的二维数组。MAP的大小由存放图像的矩阵元素值域决定,如矩阵元素值域为[0,255],则MAP矩阵的大小为256Ⅹ3,用MAP=[RGB]表示。MAP中每一行的三个元素分别指定该行对应颜色的红、绿、蓝单色值,MAP中每一行对应图像矩阵像素的一个灰度值,如某一像素的灰度值为64,则该像素就与MAP中的第64行建立了映射关系,该像素在屏幕上的实际颜色由第64行的[RGB]组合决定。也就是说,图像在屏幕上显示时,每一像素的颜色由存放在矩阵中该像素的灰度值作为索引通过检索颜色索引矩阵MAP得到。索引图像的数据类型一般为8位无符号整型(unsigned int8),相应索引矩阵MAP的大小为256Ⅹ3,因此一般索引图像只能同时显示256种颜色,但通过改变索引矩阵,颜色的类型可以调整。索引图像的数据类型也可采用双精度浮点型(double)。索引图像一般用于存放色彩要求比较简单的图像,如Windows中色彩构成比较简单的壁纸多采用索引图像存放,如果图像的色彩比较复杂,就要用到RGB真彩色图像。
详见索引图像和真彩色RGB图像介绍
举例说明
原始图片如下所示。
上图的详细信息如下:
位深度为8bit,但是显示的颜色为红黑色。
使用matlab查看图片
使用matlab的imread函数从图形文件读取图。cmap为与 img中的索引图像数据关联的颜色图,以 256×3 的 double 类矩阵形式返回,因此索引图像中有 256 种颜色。
[img,cmap] = imread(___) 将 filename 中的索引图像读入 A,并将其关联的颜色图读入 map。图像文件中的颜色图值会自动重新调整到范围 [0,1] 中。
将索引图像转换成 RGB
img_rgb= ind2rgb(img, cmap);
以上就是labelme生成的PNG单通道图片显示彩色原因。附上PNG的图像数据数组支持的位深和数据类型: