gpt4 book ai didi

python - 为什么在使用 PIL 与 cv2 加载时图像的宽度和高度会反转?

转载 作者:行者123 更新时间:2023-12-04 16:39:33 25 4
gpt4 key购买 nike

我正在加载 image使用 PILcv2包。使用 PIL 加载图像时,高度和宽度是相反的与使用 cv2 加载时相比.以下是打印使用这两个包加载的图像的高度和宽度的代码。

file = 'conceptual_captions/VL-BERT/data/conceptual-captions/val_image/00002725.jpg'
# load image using PIL
import PIL.Image
pil = PIL.Image.open(file).convert('RGB')
w, h = pil.size
print("width: {}, height: {}".format(w, h))
打印输出 width: 1360, height: 765
# now using cv2
import cv2
im = cv2.imread(file)
print("height, width, channels: {}".format(im.shape))
打印输出 height, width, channels: (1360, 765, 3)我下载了图像并使用 Mac 上的信息选项检查了图像的大小。信息有 width = 765height = 1360 ,这与 cv2 报告的相同方法。为什么是 PIL给出错误的图像尺寸?
出现问题的图像很少。我链接的图像就是这样的图像。对于其余图像, PIL 报告的高度和宽度和 cv2是相同的。

最佳答案

该图像有一些 EXIF 元数据,包括有关方向(旋转)的信息。我建议阅读 this那里的问答和后续引用资料。
尽管如此,现在提出的解决方案可以简化,只需使用 PIL.ImageOps.exif_transpose() :

If an image has an EXIF Orientation tag, return a new image that is transposed accordingly. Otherwise, return a copy of the image.


一些要测试的代码:
from PIL import Image, ImageOps

# Read original image, show width and height
file = '...'
pil = Image.open(file).convert('RGB')
w, h = pil.size
print("width: {}, height: {}".format(w, h))

# Transpose with respect to EXIF data
pil = ImageOps.exif_transpose(pil)
w, h = pil.size
print("width: {}, height: {}".format(w, h))
相应的输出:
width: 1360, height: 765
width: 765, height: 1360
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.5
Pillow: 7.2.0
----------------------------------------

关于python - 为什么在使用 PIL 与 cv2 加载时图像的宽度和高度会反转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63947990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com