OpenCV, как кодировать необработанную информацию изображения для imencode? - PullRequest
0 голосов
/ 29 мая 2019

Я на С ++.

Предположим, какая-то загадочная функция 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...]

Каков правильный порядок добавления метаданных и достаточно ли ширины, высоты и каналов?

1 Ответ

1 голос
/ 31 мая 2019

Вы можете использовать конструктор Mat для создания изображения из данных и метаданных

Mat :: Mat (int, int, col, int, void * data, size_t шаг = AUTO_STEP); // документация здесь

cv::Mat image = cv::Mat(height, width, CV_8UC3, raw_data);

type аргумент указывает количество каналов и формат данных. Например, типичные данные изображения RGB unsigned char, а число каналов 3, поэтому их тип = CV_8UC3

Определены доступные типы матов OpenCV cvdef.h

...