Created
December 23, 2019 05:47
-
-
Save AlphaNext/20a74d872505a36d514778b9b0719e92 to your computer and use it in GitHub Desktop.
Revisions
-
AlphaNext created this gist
Dec 23, 2019 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,70 @@ #include <opencv2/opencv.hpp> #include <Magick++.h> #include <iostream> using namespace std; using namespace Magick; using namespace cv; // imageMagick installation on Mac OSX: https://www.sethvargo.com/install-imagemagick-on-osx-lion/ // read gif's first frame to cv::Mat https://stackoverflow.com/questions/41841553/convert-magickimage-to-cvmat // ref link: https://imagemagick.org/discourse-server/viewtopic.php?t=35080 // compile: g++ test_gif.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` `pkg-config --cflags magick++` `pkg-config --libs magick++` cv::Mat Magick2Mat(Image& image){ // Get dimensions of Magick++ Image int w = image.columns(); int h = image.rows(); // Make OpenCV Mat of same size with 8-bit and 3 channels Mat opencvImage(h,w,CV_8UC3); // Unpack Magick++ pixels into OpenCV Mat structure image.write(0,0,w,h,"BGR",Magick::CharPixel,opencvImage.data); return opencvImage; } Magick::Image Mat2Magick(Mat& src){ if(src.channels()==4) { Image mgk(src.cols, src.rows, "BGRA", CharPixel, (char *)src.data); return mgk; } if(src.channels()==3){ cvtColor(src,src,cv::COLOR_BGR2BGRA); Image mgk(src.cols, src.rows, "BGRA", CharPixel, (char *)src.data); return mgk; } if(src.channels()==1) { cvtColor(src,src,cv::COLOR_GRAY2BGR); cvtColor(src,src,cv::COLOR_BGR2BGRA); Image mgk(src.cols, src.rows, "BGRA", CharPixel, (char *)src.data); return mgk; } } int main(int argc,char **argv){ // Initialise ImageMagick library // InitializeMagick(*argv); InitializeMagick(""); // Create Magick++ Image object and read image file list<Image> imageList; readImages(&imageList, "sample.gif"); list<cv::Mat> newList; for(list<Image>::iterator it = imageList.begin(); it != imageList.end(); it++){ Mat tmp = Magick2Mat(*it); newList.push_back(tmp); } cout << newList.size() << endl; // writeImages(newList.begin(),newList.end(),"tmp/new_image.miff"); for(list<cv::Mat>::iterator it = newList.begin(); it!=newList.end(); it++){ cv::imshow("GIF", *it); // cv::waitKey(0); } cv::waitKey(0); cv::destroyAllWindows(); // Save opencvImage // imwrite("result.png", opencvImage); return 0; }