代码出错 img = data_transform(img) File “C:\Users\Administrator\AppData\Local\Programs\Python\Python39

**运行出现:**File “E:\桌面\pytorch项目练习\predict.py”, line 28, in main
img = data_transform(img)
File “C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\torchvision\transforms\transforms.py”, line 95, in call
img = t(img)
File “C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\nn\modules\module.py”, line 1110, in call_impl
return forward_call(*input, **kwargs)
File “C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\torchvision\transforms\transforms.py”, line 270, in forward
return F.normalize(tensor, self.mean, self.std, self.inplace)
File “C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\torchvision\transforms\functional.py”, line 363, in normalize
tensor.sub
(mean).div_(std)
RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0
在这里插入图片描述

第28行代码

img = Image.open(img_path)

解决办法:在对应代码改成img = Image.open(image_path).convert(‘RGB’)

补充:

Image.open()得到的img数据类型呢是Image对象,不是普通的数组。
cv2.imread()得到的img数据类型是np.array()类型。

通道
对于Image.open()函数默认彩色图像读取通道的顺序为RGB,而cv2.imread()读取通道的顺序为BGR。同时,当图像格式为RGBA时,Image.open(‘—.jpg’)读取的格式为RGBA(其中A表示图像的alpha通道,即RGBA共四个通道),而cv2.imread(’—.jpg’)读取的格式是BGR,只有三个通道。
通过使用cv2.split(img)可得到cv2.imread()读取的图片img的BGR通道值。即使图片是RGBA四通道,cv2.imread()方法仍然读取的是BGR三通道。

显示方法

图像显示时常见方法有两种,一种是matplotlib的plt.imshow()方法,一种是opencv的cv2.imshow()。两个函数的输入都要求是数组。因此Image读取的图片要先转化为数组,再进行图片的显示。plt函数读入的顺序为RGB,cv2.imshow()读入的顺序是BGR。因此image与plt.imshow()配合使用,opencv的方法配套使用。

猜你喜欢

转载自blog.csdn.net/qq_55433305/article/details/129439981