我在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'键,然后显示视频将完成,否则视频显示仍然是运行
我该怎么做这个工作?
答案 0 :(得分:3)
如果在指定的时间内未按任何键,则cvWaitKey()返回0;如果按下某个键,则返回键码。将您的调用更改为cvWaitKey()以测试返回值,如下所示:
chr = cvWaitKey(10);
if (chr == 'q')
break;
答案 1 :(得分:0)
创建一个额外的线程,新的线程等待stdin数据。如果它收到正确的内容,则设置另一个线程检查的标志。检查它的最明显的方法是替换
while (true)
与
while (!done)
其中done
初始化为false,并由键盘线程设置为true。