Я на С++.
Предположим, что какая-то загадочная функция getData()
возвращает всю информацию об изображении, кроме информации о пикселях.
то есть char*
, который указывает только на информацию о пикселях без метаданных (без ширины, длины, высоты или каналов любой формы)
Таким образом, мы имеем:
unsigned char *raw_data = getData();
Затем у нас есть еще одна функция, которая возвращает структуру, содержащую метаданные.
например:
struct Metadata {
int width;
int height;
int channels;
//other useful fields
}
Теперь мне нужно правильно добавить метаданные объекта, чтобы создать действительный буфер изображения.
Так что вместо [pixel1, pixel2, pixel3 ...]
Я бы, например [width, height, channels, pixel1, pixel2, pixel3...]
Каков правильный порядок добавления метаданных и достаточно ли ширины, высоты и каналов?
Вы можете использовать конструктор Mat для создания изображения из данных и метаданных.
Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP); // documentation here
cv::Mat image = cv::Mat(height, width, CV_8UC3, raw_data);
Аргумент type
указывает количество каналов и формат данных. Например, типичные данные изображения RGB — это unsigned char
, а количество каналов — 3
, поэтому его тип = CV_8UC3
Доступные типы OpenCV Mat определены cvdef.h
Для
cv::imencode
? Вам не нужно ничего нигде добавлять, просто построитьcv::Mat
обертывает пиксельный буфер и передает его функции.