我正在从CUB_200创建PyTorch数据集和数据加载器。当将图像作为药丸读取时,我需要将BGR通道更改为RGB,并使用以下代码:
def _read_images_from_list(imagefile_list):
imgs = []
mean=[0.485, 0.456, 0.406]
std= [0.229, 0.224, 0.225]
Transformations = transforms.Compose([transforms.Resize([224, 224]), transforms.ToTensor(), transforms.Normalize(mean, std)])
for imagefile in imagefile_list:
# read images as PIL instead of NUMPY
img = Image.open(imagefile)
b, g, r = img.split()
img = Image.merge("RGB", (r, g, b))
img = Transformations(img) # ToTensor and between [0,1], then normalized using image net mean and std, then transposed into shape (C,H,W)
imgs += [img]
return imgs
在经历了许多类之后,我得到了以下错误。
ValueError: not enough values to unpack (expected 3, got 1)
我想知道我现在该怎么办?这意味着其中一个图像只有一个通道,而不是一个。是不是这种情况,或者我的代码有问题?我以前有一个不同的实现,但它的工作。我改变这个实现的原因是我不能规范化我的图像。这是旧的实现:
def _read_images_from_list(imagefile_list):
imgs = []
for imagefile in imagefile_list:
img = cv2.imread(imagefile).astype(np.float32)
img = cv2.resize(img, (224, 224))
# Convert RGB to BGR
img_r, img_g, img_b = np.split(img, 3, axis=2)
img = np.concatenate((img_b, img_g, img_r), axis=2)
# Extract mean
img -= np.array((103.94,116.78,123.68), dtype=np.float32) # BGR mean
# HWC -> CHW, compatible with pytorch
img = np.transpose(img, [2, 0, 1])
imgs += [img]
return imgs
1条答案
按热度按时间w46czmvw1#
我强烈建议你使用skimage.io来加载图像,而不是opencv。它默认以RGB格式打开图像,这样就消除了你的洗牌开销,但是如果你想将BGR转换为RGB,你可以使用: