OpenCV, как читать один кадр с камеры - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь прочитать один кадр с камеры, но она зависает в моей программе и заставляет окно imshow не отвечать, поэтому есть идеи, как читать один кадр, чтобы мой модуль зрения мог его обработать

Вот мой код:

 cv::VideoCapture VideoCapture;
 // Frame read from Camera will be stored in CamFrame MAT
 cv::Mat CamFrame;

// Open camera
VideoCapture.open(0);

if(!VideoCapture.isOpened())  // Check if we succeeded
{
    with for loop it not hang the imshow model  
  //   for (;;){

    // Read frame from Camera
    VideoCapture.read(this->CamFrame);
    // check if we succeeded
    if (this->CamFrame.empty()) {
        qDebug() <<  "ERROR! blank frame grabbed\n";
        break;
    }
    cv::imshow("live frame ",this->CamFrame);

     // }
}

1 Ответ

1 голос
/ 24 января 2020

Вы должны использовать waitKey () после imshow (). Как сказано в документации:

Примечание : эта функция - единственный метод в High GUI, который может извлекать и обрабатывать события, поэтому его необходимо периодически вызывать для обычной обработки событий если High GUI не используется в среде, которая занимается обработкой событий.

cv::VideoCapture VideoCapture;
 // Frame read from Camera will be stored in CamFrame MAT
 cv::Mat CamFrame;

// Open camera
VideoCapture.open(0);

if(!VideoCapture.isOpened())  // Check if we succeeded
{
    with for loop it not hang the imshow model  
  //   for (;;){

    // Read frame from Camera
    VideoCapture.read(this->CamFrame);
    // check if we succeeded
    if (this->CamFrame.empty()) {
        qDebug() <<  "ERROR! blank frame grabbed\n";
        break;
    }
    cv::imshow("live frame ",this->CamFrame);
    waitKey(0);

     // }
}

Примечание: Если вы хотите использовать imshow для непрерывных кадров, вы можете назначить регистр if с указанием c waitKey () или также в while ( )

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