我正在尝试使用 giflib 从 gif 中提取图像,以便将它们绑定到 Opencv Mat 中。我目前正在使用 Opencv-2.4.5 和 giflib-4.1.6-10。
我的问题是我只能提取 gif 的第一张图像。第二个和其他的都被划伤了,我认为这是位对齐的问题。
按照文档: http: //giflib.sourceforge.net/gif_lib.html
SavedImage *SavedImages; /* Image sequence (high-level API) */
应该提供指向图像位的指针。
#include <gif_lib.h>
#include <iostream>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int ac, char **av){
int *err;
GifFileType *f = DGifOpenFileName(av[1]);
assert(f != NULL);
int ret = DGifSlurp(f);
assert(ret == GIF_OK);
int width = f->SWidth;
int height = f->SHeight;
cout << f->ImageCount << endl;
cout << width << " : " << height<< endl;
cout << f->SColorResolution << endl;
// SavedImage *image = &f->SavedImages[0]; Does actually works
SavedImage *image = &f->SavedImages[1]; // that compile but the result is a scratched img
Mat img = Mat(Size(width, height), CV_8UC1, image->RasterBits);
imwrite("test.png", img);
DGifCloseFile(f);
return 0;
}
我不想使用 ImageMagick 来保留一小段代码并使其保持“轻量级”。
谢谢你的帮助。