int nTotalNum= capture.get(CAP_PROP_FRAME_COUNT);
를 통해 프레임 갯수를 가져온 후,
해당 프레임 갯수만큼 for문을 돌려 각 프레임을 출력하는 걸 해보고 있었다.
for(frameCnt=0;frameCnt< nTotalNum;frameCnt++){
if (frameCnt == 0) startTime = static_cast<double> (getTickCount());
capture.set(CAP_PROP_POS_FRAMES, frameCnt);
capture >> frame;
if (frame.empty()) {
printf("frame empty");
break;
}
imshow("video", frame);
setMouseCallback("video", onMouse, &frame);
문제는 이런식으로 짜버리니
영상창의 x버튼을 눌러도 다음 반복문의 imshow가 실행되며
새로운 영상창이 계속 떴다.
찾아본 결과 getWindowProperty라는 함수로 해당 window의 상태를 가져올 수가 있다고 한다.
getWindowProperty에는 다양한 property값이 있는 데,
그 중,
WND_PROP_VISIBLE
Python: cv.WND_PROP_VISIBLE
checks whether the window exists and is visible
이 프로퍼티를 사용하면 된다.
이 프로퍼티를 사용해 getWindowProperty함수를 호출하면 해당 윈도우가 있는지 검사한 후,
없다면 0 을 띄운다.
//창을 꺼도 imshow때문에 계속 창뜨는거 방지용
if (getWindowProperty("video", WND_PROP_VISIBLE) <= 0) break;
따라서 이런식으로 반복문 제일 앞에 적어주면 매 반복문마다 해당 윈도우가 있는지 검사하게 된다.
for(frameCnt=0;frameCnt< nTotalNum;frameCnt++){
//창을 꺼도 imshow때문에 계속 창뜨는거 방지용
if (getWindowProperty("video", WND_PROP_VISIBLE) <= 0) break;
if (frameCnt == 0) startTime = static_cast<double> (getTickCount());