为什么 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 方向。
我正在对自己收集的一些图像进行图像处理。 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 方向。