cv2.imread() дает разные результаты на Mac и Linux

#python #opencv

#python #opencv

Вопрос:

cv2.imread(JPG_IMAGE_PATH) выдает разные массивы на Mac и Linux.

Это может быть из-за причины, описанной здесь (см. Примечание).

Есть ли какое-либо решение для получения одинаковых массивов на Mac и Linux?

Комментарии:

1. Вероятно, лучший совет — избегать форматов с потерями.

2. Вы всегда можете попробовать разные библиотеки для чтения. Например , imageio или любая библиотека, упомянутая для ввода-вывода в scikit-image . К сожалению, я не могу гарантировать, что они будут вести себя одинаково в каждой ОС. Предупреждение в документах сведет меня с ума. Это не то, что я ожидал от такого распространенного формата изображения. Другой подход: используйте imagemagick для декодирования jpeg в некоторый формат без потерь, например png, затем продолжайте. Или, может быть, даже лучше: используйте официальный jpeg-декодер для создания некоторого промежуточного bmp.

3. @sascha skimage.io.imread() дал тот же результат на Mac и Ubuntu. Но я пока не знаю, работает ли это для каких-либо изображений или нет.

Ответ №1:

вы можете создавать opencv и libjpg из исходного кода как в Linux, так и в Mac. Используя cmake, вы можете создавать opencv с поддержкой libjpg (из исходного кода). Надеюсь, это даст вам тот же результат.

 cmake -DWITH_JPEG=ON -DBUILD_JPEG=OFF -DJPEG_INCLUDE_DIR=/path/to/libjepeg-turbo/include/ -DJPEG_LIBRARY=/path/to/libjpeg-turbo/lib/libjpeg.a /path/to/OpenCV
 

Один из источников libjpg: ссылка

В настоящее время он дает другой результат из-за разной версии libjpg в этих ОС.