首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV与PIL图像尺寸失配

OpenCV与PIL图像尺寸失配
EN

Stack Overflow用户
提问于 2021-05-11 07:43:27
回答 1查看 367关注 0票数 4

我发现了一个很奇怪的jpeg文件。(b.jpg)

这个图像有不同的大小取决于您使用的库,PIL或opencv。

对于比较图像(普通图像),我创建了a.jpg。

下面的代码显示这两个库返回不同的大小!

这个b.jpg怎么了??

代码语言:javascript
复制
import cv2
from PIL import Image
a_path = "a.jpg"
b_path = "b.jpg"
PIL_a = Image.open(a_path)
CV2_a = cv2.imread(a_path)
PIL_b = Image.open(b_path)
CV2_b = cv2.imread(b_path)

PIL_a.size  # width, height
>> (235, 149)
CV2_a.shape[1], CV2_a.shape[0]  # width, height
>> (235, 149)

PIL_b.size  # width, height
>> (5312, 2988)
CV2_b.shape[1], CV2_b.shape[0]  # width, height
>> (2988, 5312)   <-- strange

a.jpg:

b.jpg:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 08:42:10

原因是EXIF定位标签

  • OpenCV cv2.imread方法查找方向标签,并相应地旋转/翻转图像。
  • Image.open不寻找定位标签--您可以解决它,以编程方式

下面是一个代码示例,它再现了您的情况(执行时需要ExifTool ):

代码语言:javascript
复制
import numpy as np
import cv2
from PIL import Image
import subprocess as sp
import shlex

# Build synthetic image
img = np.full((100, 300, 3), 60, np.uint8)
cv2.putText(img, '1', (130, 70), cv2.FONT_HERSHEY_DUPLEX, 2, (255, 30, 30), 4)  # Blue number

cv2.imwrite('image.jpg', img)

# Change the orientation by setting "orientation" exif tag:
# https://superuser.com/questions/435443/how-can-i-modify-the-exif-orientation-tag-of-an-image
sp.run(shlex.split('exiftool -orientation=5 -n image.jpg'))  # Mark image as rotated.

cv_img = cv2.imread('image.jpg')
print((cv_img.shape[1], cv_img.shape[0]))  # (100, 300)

pil_img = Image.open('image.jpg')
print(pil_img.size)  # (300, 100)
pil_img.show()

cv2.imshow('cv_img', cv_img)
cv2.waitKey()
cv2.destroyAllWindows()

pil_img.show()

cv2.imshow('cv_img', cv_img)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67482477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档