使用 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 变量一起使用