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. Мои первые испытания показали, что это не так тривиально, как кажется на первый взгляд, потому что нужно сделать много конверсий.
Есть ли класс, который уже сделан для этой цели?