OpenCV / Tesseract: Как заменить libpng, libtiff и т. Д. С GDI + Bitmap (загрузка в cv :: Mat через GDI +)

Я работаю над проектом, который использует OpenCV и Tesseract. Обе библиотеки основаны на libpng, libtiff, libjpeg и т. Д. Для загрузки / сохранения файлов изображений.

Но Tesseract (на основе Leptonica) использует более старые версии этих библиотек, которые имеют несовместимые параметры. Поэтому я не могу использовать одни и те же библиотеки изображений для обоих: OpenCV и Tesseract.

Так что, если я собираю свой проект динамически, мне нужно будет доставить кучу DLL с моим проектом. И если я компилирую статически, я получаю огромный выходной файл, взорванный на несколько мегабайт.

Это уродливо Я не хочу этого

Другая проблема заключается в том, что почти все проекты с открытым исходным кодом, в основном разработанные в мире Linux / MAC, не поддерживают Unicode, если они скомпилированы в Windows. Внутренне все они проходятstd::string вfopen(), В Linux может работать обходной путь для кодирования пути с помощью UTF8, но в Windows - нет. Таким образом, японский пользователь не может открыть файл изображения в папке с японским именем. Хотя Microsoft уже в начале 1990-х годов приложила большие усилия, чтобы преобразовать всю операционную систему Windows NT, чтобы она была на 100% совместима с Юникодом, большинство проектов с открытым исходным кодом (таких как libpng) 20 лет спустя все еще не поддерживают прохождение пути черезstd::wstring.

ВАЖНЫЙ: Команды OpenCVimread() а такжеimwrite() НЕ должен использоваться в Windows, если вы хотите создать международный проект с поддержкой японского или китайского!

Итак, что я хочу: полностью исключить libtiff, libpng, libjpeg и т. Д. Из моего проекта:

В OpenCV комментируем:

// #define HAVE_JASPER
// #define HAVE_JPEG
// #define HAVE_PNG
// #define HAVE_TIFF
etc..

В Тессеракт / Лептоника:

#define  HAVE_LIBJPEG   0
#define  HAVE_LIBTIFF   0
#define  HAVE_LIBPNG    0
#define  HAVE_LIBZ      0
#define  HAVE_LIBGIF    0
#define  HAVE_LIBUNGIF  0
etc..

... и вместо этого используйте GDI +, который является частью операционной системы Windows и поддерживает загрузку / сохранение BMP, TIF, PNG, JPG, GIF. Кроме того, GDI + совместим с Юникодом.

Я знаю, что это можно сделать с помощью нескольких строк кода, но такой полезный класс отсутствует в проекте OpenCV. Мои первые испытания показали, что это не так тривиально, как кажется на первый взгляд, потому что нужно сделать много конверсий.

Есть ли класс, который уже сделан для этой цели?

Ответы на вопрос(1)

Ваш ответ на вопрос