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

Why is dlib's load_rgb_image() method rotating some of my images?

我正在对自己收集的一些图像进行图像处理。 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 的方法 returns 正确的形状:

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

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

有人知道为什么会这样吗?

我还附上其中一张违规照片的图像详细信息:

感谢@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 方向。