The method is easy.
Firstly, enter the file name included file extension (ex: s.avi)
Then, video will be play.
Press p key on the video play window, if you want to save image.
Video will play after end of drag and drag region will be saved in your folder.
'ESC' key is for program finish.
Thank you.
example video is here
-> https://www.youtube.com/watch?v=ZpO1b-lZb7g
///
#include < stdio.h> #include < iostream> #include < opencv2\opencv.hpp> #ifdef _DEBUG #pragma comment(lib, "opencv_core249d.lib") #pragma comment(lib, "opencv_highgui249d.lib") #else #pragma comment(lib, "opencv_core249.lib") #pragma comment(lib, "opencv_highgui249.lib") #endif using namespace std; using namespace cv; bool selectObject = false; Rect selection; Point origin; Mat image; bool pause =false; double fpss; Rect PatchRect; Mat PatchImg; unsigned int frame_index=0; static void onMouse( int event, int x, int y, int, void* ) { if( selectObject & pause) { selection.x = MIN(x, origin.x); selection.y = MIN(y, origin.y); selection.width = std::abs(x - origin.x); selection.height = std::abs(y - origin.y); selection &= Rect(0, 0, image.cols, image.rows); } switch( event ) { case CV_EVENT_LBUTTONDOWN: origin = Point(x,y); selection = Rect(x,y,0,0); selectObject = true; break; case CV_EVENT_LBUTTONUP: if(selectObject && pause) { if(selection.width > 5 && selection.height > 5 ) { PatchRect = selection; image( PatchRect ).copyTo( PatchImg ); imshow("Selected Img", PatchImg ); char str[100]; sprintf_s(str,"%d.jpg", int(frame_index/fpss)); imwrite(str, PatchImg); }else selection = Rect(0,0,0,0); } selectObject = false; pause = false; break; } } int main (void) { printf("avi file name?"); char nstr[255]; scanf_s("%s", nstr); printf("-> %s", nstr); VideoCapture cap(nstr); Mat frame; namedWindow( "Demo", 0 ); setMouseCallback( "Demo", onMouse, 0 ); printf("P key is pause, ESC key is exit.\n"); for(;;) { frame_index++; if(!pause) cap >> frame; if( frame.empty() ) break; frame.copyTo(image); if( pause && selection.width > 0 && selection.height > 0 ) { rectangle(image, Point(selection.x-1, selection.y-1), Point(selection.x+selection.width+1, selection.y+selection.height+1), CV_RGB(255,0,0) ); } imshow( "Demo", image ); char k = waitKey(10); if( k == 27 ) break; else if(k == 'p' || k=='P' ) pause=!pause; } return 0; }...
Hello,
ReplyDeleteWhen running this program, my video is playing faster than usual, how can i get it to normal speed again?
Thanks
It is the posting for you!!! ^^
Deletehttp://study.marearts.com/2017/04/video-show-and-write-keeping-original.html
Thank you for visiting and interesting.
안녕하세요 강의를 따라 듣고 있는 학생입니다. 이 예제 코드를 따라서 실행해 봤는데 그림이 저장되는 부분에서 오류가 생겼습니다. 제 생각에는 저장되는 부분에서 fpss라는 변수가 선언 후에 값이 변동되질 않아 생기는 문제 인것 같은데 도움을 주신다면 감사하겠습니다
ReplyDelete답변이 늦어서 죄송합니다.
Delete네 fpss가 아무 값도 안들어 가네요.. ^^
제가 무슨 생각으로 이렇게 짰는지..
어째든 아무 이름이나 들어가면 되니깐
sprintf_s(str,"%d.jpg", int(frame_index/fpss));
를
sprintf_s(str,"%d.jpg", int(frame_index));
으로 고쳐보세요.
감사합니다.