使用 giflib 将 opencv mat 编码为 gif

Posted

技术标签:

【中文标题】使用 giflib 将 opencv mat 编码为 gif【英文标题】:encode opencv mat to gif using giflib 【发布时间】:2015-04-15 14:25:09 【问题描述】:

我正在尝试使用 giflib 将一些 Mats 编码为 gif 文件,但我无法让它工作。

以下是我将 opencv mat 的数据转换为 gif 像素的方法:

cv::resize(input_mat, input_mat, cv::Size (160, 160));
cv::Mat mrgba(160, gif_size, CV_8UC4, cv::Scalar(0,0,0,0));
cv::cvtColor(input_mat, mrgba, CV_BGR2RGBA);
Byte * buffer = malloc( 160 * 160 *sizeof(Byte));
memcpy(buffer, mrgba.data, 160 * 160 *sizeof(Byte));

然后将缓冲区编码为 gif 文件。我的代码的另一部分是正确的,因为我可以使用它来编码通过使用glReadPixel 从 OpenGL 获得的像素缓冲区。我认为 OpenCV mat 的数据结构可能有问题。

让我附上一张图片来告诉你我现在得到了什么:

【问题讨论】:

什么是“输入”?为什么从未使用过'input_mat'? @berak 抱歉,input 打错了,应该是 input_mat。我正在调整 input_mat 的大小,然后将其转换为 RGBA 颜色空间。然后将其数据复制到buffer 在这种情况下,您没有复制足够的字节。 BGRA 每个像素有 4 个字节,所以你必须 malloc 并复制 4 x 160 x 160 字节 你太棒了!这就是原因! 【参考方案1】:

正如@berak 所说,我没有复制足够的字节。当前大小应该是

memcpy(buffer, mrgba.data, 160 * 160 *sizeof(Byte));

【讨论】:

以上是关于使用 giflib 将 opencv mat 编码为 gif的主要内容,如果未能解决你的问题,请参考以下文章

opencv中imencode把Mat编码成jpg格式的内存几行代码备份

Libav AVFrame 到 Opencv Mat 到 AVPacket 的转换

OpenCV:将 cvGoodFeaturesToTrack 与 C++ mat 变量一起使用

opencv:将 Mat 转换为 IplImage 问题

使用 opencv 中的文件存储将多个 Mat 变量写入 XML 文件

OPENCV学习笔记3_Mat 保存