cv::VideoCapture から取得した複数のフレームを std::vector に保管する
clone() していないでやっていて,詰まった.
#include <vector> #include <opencv/cv.h> #include <opencv/highgui.h> #ifdef _DEBUG #pragma comment( lib, "cv200d.lib" ) #pragma comment( lib, "cxcore200d.lib" ) #pragma comment( lib, "highgui200d.lib" ) #else #pragma comment( lib, "cv200.lib" ) #pragma comment( lib, "cxcore200.lib" ) #pragma comment( lib, "highgui200.lib" ) #endif // video2vectormat.exe <videofile> int main ( int argc, char *argv[] ) { // parameter count if ( argc < 2 ) { return 0; } // load video cv::VideoCapture vc( argv[1] ); if ( !vc.isOpened() ) { return 0; } // var std::vector<cv::Mat> images; int frame = 15; cv::Mat image; // getframes for ( int i = 0; i < frame; i++ ) { vc >> image; if ( image.empty() ) { break; } images.push_back( image.clone() ); } // release video vc.release(); // showframes std::string wname( "preview" ); cv::namedWindow(wname, CV_WINDOW_AUTOSIZE ); int key; for ( unsigned int i = 0; i < images.size(); i++ ) { cv::imshow( wname, images[i] ); key = cv::waitKey(500); // if esc then break if ( key == 0x1b ) { break; } } // end. cv::imshow( wname, cv::Mat( image.size(), image.type() )); cv::waitKey(); return 0; }