使用 giflib 将 opencv mat 编码为 gif

encode opencv mat to gif using giflib

我正在尝试使用 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的数据结构可能有问题。

让我附上一张图片,向您展示我现在得到的东西:

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

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