Как заставить linux-систему ждать в программе OpenCV? - PullRequest
1 голос
/ 03 марта 2012

У меня очень простая программа на 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 ]

3 голосов
/ 03 марта 2012

cvWaitKey () возвращает 0, если ни одна клавиша не была нажата в отведенное время, или код клавиши, если клавиша нажата. Измените ваш вызов на cvWaitKey (), чтобы проверить возвращаемое значение следующим образом:

chr = cvWaitKey(10);
if (chr == 'q')
    break;
0 голосов
/ 03 марта 2012

Создайте дополнительный поток, в котором новый ожидает данные стандартного ввода.Если он получает правильное содержимое, тогда установите флаг, который проверяет другой поток.Наиболее очевидный способ проверить это - заменить

while (true)

на

while (!done)

, где done инициализируется как false, а значение true - потоком клавиатуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...