如何让linux系统等待OpenCV程序?

时间:2012-03-03 00:13:27

标签: c++ opencv webcam

我在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;
}

我希望有一个char ch;和类似while(ch != 'q')的内容,然后它仍会播放视频。有一些方法,如kbhit()getch(),但它们不是标准的,我想要的东西,每当按下'q'键,然后显示视频将完成,否则视频显示仍然是运行

我该怎么做这个工作?

2 个答案:

答案 0 :(得分:3)

如果在指定的时间内未按任何键,则cvWaitKey()返回0;如果按下某个键,则返回键码。将您的调用更改为cvWaitKey()以测试返回值,如下所示:

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

答案 1 :(得分:0)

创建一个额外的线程,新的线程等待stdin数据。如果它收到正确的内容,则设置另一个线程检查的标志。检查它的最明显的方法是替换

while (true)

while (!done)

其中done初始化为false,并由键盘线程设置为true。