为什么dlib的load_rgb_image()方法会旋转我的一些图像?

问题描述 投票:0回答:1

我正在使用我自己收集的一些图像处理图像处理。 Dlib的dlib.load_rgb_image('image_path')方法在一些图像上交换行和列,而OpenCV的cv2.imread('image_path')方法则没有。

我不想亲自动手转动这些有问题的图像,因为我正在创建一个应用程序。

看一看以下的结果

img = dlib.load_rgb_image("myimg.jpg")
print(img.shape)

--------------------
OUTPUT: (1944, 2592, 3)
(the resultant image is rotated 90 degrees clockwise)

而OpenCV的方法返回正确的形状:

img = cv2.imread("myimg.jpg")
print(img.shape)

--------------------
OUTPUT: (2592, 1944, 3)

有谁知道为什么会这样?

我还附上了其中一张有问题的照片的图像细节:

image.png

python image opencv dlib
1个回答
1
投票

感谢@Mark Setchell,指出我正确的方向。

EXIF数据是关键所在。

dlib.load_rgb_image()没有考虑EXIF orientation元数据,因此有些图像读取不正确。要修复此图像的EXIF方向标记,需要检查该标记以对其执行正确的旋转。

以下是一些很好的答案:Rotating an image with orientation specified in EXIF using Python without PIL including the thumbnail

显然,因为OpenCV 3.1 imread完美地处理EXIF方向。

© www.soinside.com 2019 - 2024. All rights reserved.