Почему метод dlib load_rgb_image () вращает некоторые из моих изображений? - PullRequest
0 голосов
/ 28 марта 2019

Я работаю над обработкой изображений с некоторыми изображениями, которые я собрал сам. Метод 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

1 Ответ

1 голос
/ 28 марта 2019

Спасибо @Mark Setchell, за то, что указал мне правильное направление.

Данные EXIF ​​являются ключом, здесь.

dlib.load_rgb_image() не учитывает метаданные EXIF ​​orientation, поэтому некоторые изображения читаются неправильно. Для исправления этого EXIF ​​тег ориентации изображения необходимо проверить для правильного поворота на нем.

Вот несколько хороших ответов: Поворот изображения с ориентацией, указанной в EXIF, с использованием Python без PIL, включая миниатюру

Видимо, поскольку OpenCV 3.1 imread отлично справляется с ориентацией EXIF.

...