我尝试使用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的数据结构可能有问题。
让我附上一张图片,告诉你我现在得到了什么:
答案 0 :(得分:1)
正如@berak所说,我没有复制足够的字节。当前大小应
memcpy(buffer, mrgba.data, 160 * 160 *sizeof(Byte));