Panel.image отображает некоторые изображения с неправильной ориентацией - PullRequest
0 голосов
/ 18 мая 2019

Мы работаем над Tensorflow для обучения набора данных изображений. Для получения изображений мы записываем видео с помощью наших телефонов и, используя OpenCV в Python, извлекаем каждый кадр и сохраняем их как изображения JPG. Я перевожу некоторые из них в портретный режим с помощью приложения «Фото» в Windows 10.

Затем у нас есть собственный инструмент для написания аннотаций, написанный на Java, для маркировки каждого элемента, который мы видим на изображениях. Он возвращает файл CSV для каждого объекта с их координатами (в процентах).

Однако, когда я вчера запустил тренировку, через интерфейс тензорной доски я заметил, что некоторые из них не были правильно аннотированы (те, которые я вращал с фотографиями)

Вот изображение, открытое на Tensorboard, вы можете видеть, что банка очень плохо аннотирована.

Image on tensorboard

Оказывается, что если я открою это изображение с помощью нашего программного обеспечения Java, оно будет хорошо аннотировано, но, как вы можете видеть ниже, изображение является горизонтальным (оно не учитывает поворот, примененный к фотографиям):

Image via the Java tool

Если я открою его с помощью Paint или проводника, он появится в портретном режиме, как в тензорной доске.

Другой факт: если я отправлю изображение через Facebook и снова загрузлю его, оно будет отображаться в портретном режиме на инструменте Java, как это было бы с самого начала.

На этот раз я попытался повернуть изображение с помощью Paint, и оно правильно отображается в инструменте Java.

Код, который отображает изображение на Java:

panel.image = New File(srcFile);

Код, который сохраняет видеокадр в Python:

cap = cv.VideoCapture(video_path)
while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        try:
            cv.imwrite(output_img_path, frame)
        except Exception:
            pass
    else:
        break
cap.release()

Знаете ли вы, почему Java игнорирует вращение, применяемое с помощью программного обеспечения Win10 Photos, и почему оно работает с помощью Paint?

Есть ли способ заставить Java принять это во внимание, потому что было бы очень неприятно начинать заново с нуля.

Заранее благодарю,

1 Ответ

0 голосов
/ 18 мая 2019

Заметив, что вращение изображений с помощью Paint вместо Photos дает то, что мы хотели, я обнаружил, что это не так.

"Если вы используете Windows 10, обозреватель файлов и средство просмотра изображений по умолчанию будут правильно подчиняться тегу ориентации Exif, поэтому фотографии, которые поступают с вашего смартфона или цифровой камеры, будут отображаться надлежащим образом. Google Android и Apple iOS оба изначально создают фотографии с тегом Exif Orientation и поддерживайте его. " ( источник )

Я использовал JPG автоавторт, чтобы исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...