将 numpy ndarray 转换为 PIL 并将其转换为张量

Convert numpy ndarray to PIL and and convert it to tensor

def camera(transform):
    capture = cv2.VideoCapture(0)
    while True:
        ret, frame = capture.read()
        cv2.imshow('video', frame)
        # esc
        if cv2.waitKey(1) == 27:
            photo = frame
            break
    capture.release()
    cv2.destroyAllWindows()
    img = Image.fromarray(cv2.cvtColor(photo, cv2.COLOR_BGR2RGB))
    img = img.resize([224, 224], Image.LANCZOS)
    if transform is not None:
        img = transform(img).unsqueeze(0)
    return img

这是我从相机获取图像的代码,

image_tensor = img.to(device)

而且我在上面一行有错误...

Traceback (most recent call last):
  File "E:/PycharmProjects/ArsElectronica/image_captioning/sample.py", line 126, in <module>
    main(args)
  File "E:/PycharmProjects/ArsElectronica/image_captioning/sample.py", line 110, in main
    caption = Image_Captioning(args, img)
  File "E:/PycharmProjects/ArsElectronica/image_captioning/sample.py", line 88, in Image_Captioning
    image_tensor = img.to(device)
AttributeError: 'Image' object has no attribute 'to'

错误是这样的

如果我将图像作为 png 文件并使用 PIL 重新加载它,它就可以工作。 但是我想要的是不保存直接使用图片

请...有人救救我...

您可以使用 torchvision.transforms.ToTensor:

PIL.Image 转换为 torch.Tensor
    if transform is not None:
        img = transform(img).unsqueeze(0)

    tensor = T.ToTensor()(img)
    return tensor

已将 torchvision.transforms 导入为 T