Notice
Recent Posts
Recent Comments
Link
DY N DY
opencv를 이용해 영상의 원하는 구간 잘라내기 본문
opencv를 이용하여 영상 부분 잘라내기
원하는 구간을 잘라낼 때 사용한다.
opencv 3.1 기준.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include <iostream> #include <opencv/cv.hpp> using namespace std; using namespace cv; #define input "input.avi" #define output "output.avi" #define startFrame 500 #define endFrame 1000 int main() { int iCurrentFrame = 0; VideoCapture vc = VideoCapture(input); if (!vc.isOpened()) { cerr << "fail to open the video" << endl; return EXIT_FAILURE; } double fps = vc.get(CV_CAP_PROP_FPS); int width = (int)vc.get(CV_CAP_PROP_FRAME_WIDTH); int height = (int)vc.get(CV_CAP_PROP_FRAME_HEIGHT); VideoWriter vw(output, CV_FOURCC('D', 'I', 'V', 'X'), fps, Size(width, height)); if ((startFrame < 0 || startFrame >= vc.get(CV_CAP_PROP_FRAME_COUNT)) || (endFrame < 0 || endFrame >= vc.get(CV_CAP_PROP_FRAME_COUNT))) { cerr << "wrong frame" << endl; return EXIT_FAILURE; } vc.set(CV_CAP_PROP_POS_FRAMES, startFrame); while (true) { if (iCurrentFrame > (endFrame - startFrame)) break; iCurrentFrame++; Mat frame; vc >> frame; if (frame.empty()) break; vw.write(frame); imshow("image", frame); waitKey(1); } vw.release(); return EXIT_SUCCESS; } | cs |
다른 부분은 사실 크게 어려울 것은 없고.
VideoCapture의 set을 이용해 원하는 프레임으로 이동하는 37라인만 알면 될 것 같다.
get함수가 원하는 property를 가져오듯이 set함수로 원한s property를 변경가능하다.
이를 이용해 시작 프레임을 원하는 시작프레임(9라인의 startFrame)으로 변경해주고
원하는 만큼 VideoWrter에 Write해준 후 while loop를 종료한다.
'PARK > 영상처리 관련' 카테고리의 다른 글
opencvsharp WPF연동하여 file 열기(open file dialog, drag) (0) | 2016.12.07 |
---|---|
opencvsharp WPF연동하여 webcam출력 (0) | 2016.12.01 |
opencv를 이용한 영상 합치기 (0) | 2016.11.17 |
bomi 개발 시작 (0) | 2016.11.17 |
opencv dilate/erode 연산 정리 (1) | 2016.11.08 |