2012-03-03 4 views
1

내가 OpenCV의에 아주 간단한 프로그램을 가지고 :OpenCV 프로그램에서 리눅스 시스템을 대기시키는 방법은 무엇입니까?

#include <cv.h> 
#include <cxcore.h> 
#include <highgui.h> 

using namespace std; 

void showVideo(CvCapture *video) 
{ 
    int width = (int) cvGetCaptureProperty(video, CV_CAP_PROP_FRAME_WIDTH); 
    int height = (int) cvGetCaptureProperty(video, CV_CAP_PROP_FRAME_HEIGHT); 
    //int fps = (int) cvGetCaptureProperty(video, CV_CAP_PROP_FPS); 
    IplImage* frame = cvCreateImage(cvSize(width, height), 8, 1); 
    cvNamedWindow("Showing Video:", 0); 
    while (true) 
    { 
     frame = cvQueryFrame(video); 
     cvShowImage("Showing Video:", frame); 
     cvWaitKey(10); 
    } 
    //cvDestroyWindow("Showing Video:"); 
    //cvReleaseImage(&frame); 
} 
int main() 
{ 
    CvCapture *video = cvCaptureFromCAM(CV_CAP_ANY); 
    showVideo(video); 
    return 0; 
} 

내가이 while(ch != 'q') 같은 char ch; 무언가를 갖고 싶어은 여전히 ​​비디오를 재생합니다. kbhit() 또는 getch()과 같은 몇 가지 방법이 있지만 표준이 아니므로 'q'키를 누를 때마다 동영상 표시가 끝나기를 원합니다. 그렇지 않으면 동영상 표시가 계속 실행됩니다.

이 작업을 어떻게 수행합니까?

답변

3

cvWaitKey()는 할당 된 시간에 키를 누르지 않았거나 키를 누르면 키 코드를 반환합니다. 반환 값을 다음과 같이 테스트하려면 cvWaitKey() 호출을 변경하십시오.

chr = cvWaitKey(10); 
if (chr == 'q') 
    break; 
0

새로운 스레드가 표준 데이터를 기다리는 스레드를 추가로 만듭니다. 적절한 내용을 수신하면 다른 스레드가 확인하는 플래그를 설정합니다. 가장 확실한 방법은 done false로 초기화하고, 키보드 스레드에 의해 true로 설정되는 경우

while (!done) 

while (true) 

을 교체하는 것입니다 확인합니다.

관련 문제