‘P’,’RGBA’,’RGB’这是PIL Image读图可能出现的三种mode,每种mode的图片数据都有不同的组织形式,当训练/测试数据都是一堆图片时,尤其是那种没人帮你清洗的数据时,自己就要留神了,否则模型还没跑起来就给提前自己挖了个坑。
首先,先容许我吐槽一下OpenCV的两个抽风,我用的python接口的(估计没怎么维护吧,所以有bug),用cv2.imread读图:
对’RGBA’图的抽风
‘RGBA’的图像,按照文档所述:
我把flag置为-1,然而读出来的还是3通道的(alpha通道不见了),置成0,1倒是确实是RGB和Grayscale。
对’P’图的抽风
对于mode为’P’的图,制作本来就有点生僻。用cv2.imread去读的话,读不出来,怎么读都是NoneType。
然而,这两个OpenCV的抽风问题在PIL这里就不存在了,感觉还是PIL大法好,不管图像是什么mode,都能原汁原味地读出来。
而且,幸运的是,可以很简单的把’RGBA’和’P’ mode的图像转换成’RGB’图: