首页 > 解决方案 > 如何将 Opencv Mat 转换为 JPEG 字符数据

问题描述

最近,我无法将 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 图像。

谁能帮我解决这个问题?

标签: c++opencvjpegmat

解决方案


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

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


推荐阅读