Как конвертировать Opencv Mat в JPEG данные - PullRequest
0 голосов
/ 06 июля 2019

Недавно у меня возникли проблемы с преобразованием кадра Mat, снятого с моей веб-камеры OpenCV, в обычный массив символов без знака JPEG.Я пробовал один или два пути в Google, но результат, кажется, не правильный массив jpeg uchar.Вот фрагмент моего кода:

 VideoCapture cap(0);
 if(!cap.isOpened())
    return -1;
 Mat frame;
 cap >> frame;
 if( frame.empty()) 
    return -1;
 int size = frame.total() * frame.elemSize();
 unsigned char* buffer = new unsigned char[size];
 memcpy(buffer, frame.data, size * sizeof(unsigned char));

Затем я использовал fwrite , чтобы записать этот буфер в file.jpg (это выглядит глупо, но работаетесли буфер правильный), но файл не может быть открыт или определен как изображение JPEG.

Может кто-нибудь помочь мне разобраться?

1 Ответ

2 голосов
/ 06 июля 2019

Проверьте функцию OpenCV imencode().Он заполнит буфер данными, закодированными как правильный тип изображения (на основе аргумента типа файла), чтобы его можно было записать в файл, и другие программы будут знать, что с ним делать.

Проблема с вашим текущим подходом заключается в том, что вы пытаетесь записать необработанные данные изображения в формате JPEG, но JPEG - это сжатый формат данных, поэтому программы не будут знать, что делать сданные, которые вы написали.Это было бы эквивалентно бинарному файлу и простому сохранению его в формате JPEG, файл не будет иметь правильных заголовков, которые будут декодированы как изображение, и в противном случае данные, скорее всего, не будут совпадать с форматом JPEG.

...