项目场景:
在做一个关于cv深度学习的模型训练,在自己电脑上实现的时候是使用PIL库读和处理tiff图片,由于训练需要,在朋友电脑上配置环境,部署代码,迁移时出现问题
问题描述:
在做数据增广的使用,需要使用torchvision,其中torchvision中的transform是以PIL格式的图片交互的,因此代码是通过Image.open("****.tif")读入,然后使用np.array(img)以数组形式进行自定义增广。
跑通之后在朋友的电脑上安装相同版本的pillow和相同版本的numpy,发现使用np.array(PIL.image)后,返回的依然时PIL class Image,说明np.array 对此其无效
原因分析:
其实---没有分析出来为什么处理无效,但是处理png.jpg格式图片的时候,就没有这样的现象,可能还是因为tiff图片的原因吧
解决方案:
使用opencv对tiff图片进行读入,读入后的类型就是numpy ndarray,之后可以再通过PIL 完成从numpy数组到PIL image 的转换,但是要注意opencv读取图片,红绿蓝三通道的顺序是蓝绿红!!非常的反人类,在这个坑里陷入一晚上!!
参考代码如下
#使用opencv读入tif图片
path='\**\**.tif'
img=cv2.imread(path)
#使用PIL讲ndarray转换为PIL类型的image(要注意由于三原色通道读取顺序不一样,因此应该将数组进行通道顺序转换!!!)
pil_img=PIL.Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)