在尝试用深度学习做项目时,发现对于Pytorch框架下的cnn网络,灰度图的输入格式应该为(n,ch,h,w)。n为图片数量,ch为通道数,h,w为图片长宽像素。
然而实际在opencv处理的通道数为1灰度图时,其给出的图片大小为(h,w)其直接忽视了通道数,这样数据集的格式为(n,h,w)。不满足Pytorch输入要求。
而如果采用np.reshape(1,h,w)改变格式,当图片用reshape(h,w)复原为(h,w)时可能会失真。因此可以采用np.newaxis加一个维度。
以下为代码
for j in range(len(train_name5)):
image_data = [] #空的list
image_label = []
for i in range(len(level)):
read_path=path+level[i]+"/"+train_name5[j]
pic=cv.imread(read_path)
gray=cv.cvtColor(pic,cv.COLOR_BGR2GRAY)
gray=cv.resize(gray,(150,150))#改变图片大小
cv.imshow("aa",gray)
#gray=gray.reshape(1,150,150)
image_label_data=i #标签
gray = gray.astype(float)
image_data.append(gray[np.newaxis,:])#增加1dim
image_label.append(image_label_data)
image_label = np.array(image_label)
image_label = image_label.astype(int)
#print(image_data.shape)
np.save("Image_data5.npy", image_data)
np.save("label_data5.npy", image_label)
i=np.load("Image_data5.npy")
print(i.shape)
#输出结果
(5, 1, 150, 150)