getWindowProperty를 통해 창이 꺼졌는지 체크

jh Seo·2023년 10월 2일
0

openCV공부

목록 보기
3/5

개요

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());

레퍼런스

https://docs.opencv.org/3.4/d7/dfc/group__highgui.html

profile
코딩 창고!

0개의 댓글