0

Opencv Mat にバインドするために、giflib を使用して gif から画像を抽出しようとしています。現在、Opencv-2.4.5 と giflib-4.1.6-10 を使用しています。

私の問題は、gif の最初の画像しか抽出できないことです。2枚目以降はキズがありますが、ビット合わせの問題だと思います。

ドキュメントに従う: 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 を使用して小さなコードを保持し、それを「軽量」に保ちたくありません。

ご協力いただきありがとうございます。

4

1 に答える 1