opencv-core-imgcodecs
Подмножество библиотеки OpenCV (Open Source Computer Vision Library), объединяющее два фундаментальных модуля: core и imgcodecs. Модуль core предоставляет базовые структуры данных и алгоритмы линейной алгебры, необходимые для всех остальных компонентов OpenCV. Модуль imgcodecs отвечает за чтение и запись изображений в различных форматах, выступая связующим звеном между файловой системой и внутренним представлением данных OpenCV.
Особенности
- единая интеграция двух ключевых модулей OpenCV для работы с изображениями;
- модуль
coreсодержит основные структуры данных (Mat,Point,Size,Scalar), операции с матрицами и утилиты; - модуль
imgcodecsобеспечивает чтение/запись изображений в популярных форматах (PNG, JPEG, TIFF, WebP и др.); - поддержка работы с памятью (кодирование/декодирование из буфера) без обращения к файловой системе.
Основные компоненты
Объединённый модуль состоит из двух взаимодополняющих частей, которые вместе обеспечивают полный цикл обработки изображений — от загрузки до базовых преобразований и сохранения (подробнее с документацией можно ознакомиться здесь).
Базовая функциональность (core module)
Модуль core является фундаментом OpenCV, предоставляя структуры данных и функции, на которых строятся все остальные модули. Он включает представление изображений в виде многомерных матриц, базовые математические операции и управление памятью.
Основные возможности модуля core:
cv::Mat— основной класс для хранения изображений и многомерных массивов;cv::Point,cv::Size,cv::Rect,cv::Scalar— вспомогательные структуры для геометрических операций;cv::add(),cv::subtract(),cv::multiply(),cv::divide()— поэлементные операции с матрицами;cv::bitwise_and(),cv::bitwise_or(),cv::bitwise_xor()— побитовые операции;cv::LUT()— применение таблицы поиска (look-up table) к изображению;- Управление памятью и подсчёт ссылок через механизм
cv::UMatдля работы с OpenCL.
Чтение и запись изображений (imgcodecs module)
Модуль imgcodecs предоставляет простой и единообразный API для загрузки изображений из файлов или буферов памяти и сохранения их в различных форматах. Он автоматически определяет формат по содержимому файла и использует соответствующие кодеки.
Основные функции модуля imgcodecs:
cv::imread()— загрузка изображения из файла с возможностью указания режима (цветное, grayscale, без изменений);cv::imwrite()— сохранение изображения в файл; формат определяется по расширению файла;cv::imdecode()— чтение изображения из буфера памяти;cv::imencode()— кодирование изображения в буфер памяти;cv::haveImageReader()/cv::haveImageWriter()— проверка поддержки формата для чтения/записи.
Поддерживаемые форматы и параметры
Модуль imgcodecs поддерживает широкий спектр форматов изображений благодаря встроенным кодерам и внешним зависимостям. Для многих форматов доступны настраиваемые параметры сжатия.
Основные поддерживаемые форматы:
- BMP, PBM, PGM, PPM, PAM, PFM — встроенная поддержка без внешних зависимостей;
- JPEG — требует
libjpegилиlibjpeg-turbo; настройка качества черезIMWRITE_JPEG_QUALITY; - PNG — требует
libpng; настройка уровня сжатия черезIMWRITE_PNG_COMPRESSION; - TIFF — требует
libtiff; поддержка многокадровых изображений и различных схем сжатия; - WebP — требует
libwebp; настройка качества черезIMWRITE_WEBP_QUALITY; - OpenEXR — требует библиотеку OpenEXR; поддержка 16-битных и 32-битных изображений с плавающей точкой;
- JPEG 2000 — требует
jasperилиopenjpeg; - AVIF — требует
libavif(опционально).
Режимы загрузки изображений
При чтении изображений через imread() можно задать режим, определяющий, как изображение будет интерпретировано и преобразовано.
Основные режимы (ImreadModes):
IMREAD_UNCHANGED— загружать изображение как есть (сохраняя альфа-канал и глубину);IMREAD_GRAYSCALE— преобразовать в одноканальное изображение в градациях серого;IMREAD_COLOR— преобразовать в трёхканальное BGR-изображение (по умолчанию);IMREAD_ANYDEPTH— загружать с исходной глубиной цвета (16-бит/32-бит, если доступно);IMREAD_ANYCOLOR— загружать в любом цветовом формате;IMREAD_IGNORE_ORIENTATION— игнорировать EXIF-ориентацию.
Работа с памятью и буферами
Помимо файлового ввода-вывода, модуль imgcodecs позволяет работать с изображениями, находящимися в оперативной памяти. Это полезно при передаче изображений по сети, работе с базами данных или интеграции с другими библиотеками.
Функции для работы с памятью:
cv::imdecode()— декодирование изображения из массива байт (например, загруженного из сети);cv::imencode()— кодирование изображения в массив байт для последующей передачи или сохранения;- Поддержка всех форматов, доступных для файлового ввода-вывода.