I am loading an image using PIL and OpenCV packages. The height and width are reversed when loading the image using PIL
versus when loading using cv2
. Following is the code to print height and width of the image loaded using both the packages.
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))
Print output
width: 1360, height: 765
# now using cv2
import cv2
im = cv2.imread(file)
print("height, width, channels: {}".format(im.shape))
print output height, width, channels: (1360, 765, 3)
I downloaded the image and checked the size of the image using info option on Mac. Info has width = 765
and height = 1360
, which is same as reported by cv2
method. Why is PIL
giving wrong image dimensions?
The problem occurs with very few images. The image I have linked is one such image. For rest of the images, the height and width reported by PIL
and cv2
are the same.
The image has some EXIF meta data including information about orientation (rotation). I suggest reading this Q&A and subsequent references there.
Nevertheless, the proposed solution there can be simplified nowadays, just use 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.
Some code to test:
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))
The corresponding output:
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
----------------------------------------
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With