将Mat压缩为Jpeg,并将结果保存到内存中

21

我知道函数cv::imwrite可以将cv::Mat压缩为Jpeg格式并保存到文件中。但现在我想将它保存在内存中,例如一个uchar数组中。这样我就可以将数组发送给另一个人,并且它可以将数据写入Jpeg文件。有没有人能帮我解决这个问题?

2个回答

31

由于您没有指定编程语言,我将用C++为您提供答案。

    std::vector<uchar> buff;//buffer for coding
    std::vector<int> param(2);
    param[0] = cv::IMWRITE_JPEG_QUALITY;
    param[1] = 80;//default(95) 0-100
    cv::imencode(".jpg", mat, buff, param);

我尝试过这个,但如果我将缓冲区写入JPEG文件,则无法将该文件作为JPEG图片打开。当我尝试打开它时,会出现错误。 - charlie
使用JPG格式的图像时,你不能直接使用例如'imshow'这样的函数。你需要先进行解码操作。 - Humam Helfawi
如果他将接收到的数据作为字节流写入某个文件,我认为它会起作用。关键是“绝不要将JPEG流处理为图像。它不是图像。” - Humam Helfawi
当你说图像时,是指图片文件还是Mat类型的数据? - charlie
1
理论上它们是相同的。实际上,由于压缩算法和压缩比率的不同,您会发现一些差异。 - Humam Helfawi
显示剩余3条评论

1
如果您选择的编程语言是Java,则使用:

Highgui.imencode("jpg", mat, buffer)


OP的问题标记为[tag:c++]。 - Adrian W
1
如何在JavaScript或TypeScript中实现? - Satyam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接