如何将Opencv Mat转换为JPEG char数据

时间:2019-07-06 10:56:37

标签: c++ opencv jpeg mat

最近,我在将OpenCV从网络摄像头捕获的Mat帧转换为普通的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 个答案:

答案 0 :(得分:2)

签出OpenCV功能imencode()。它将使用编码为正确图像类型(基于文件类型参数)的数据填充缓冲区,以便可以将其写入文件,并且其他程序将知道如何处理该文件。

当前方法的问题是您试图将原始图像数据写入JPEG,但是JPEG是一种压缩数据格式,因此程序将不知道如何处理您的数据已经写了。这相当于获取一个二进制文件并将其另存为JPEG,该文件将没有正确的标头被解码为图像,否则数据无论如何都可能与JPEG格式不匹配。