CV::VideoCapture::open()中的一个错误

A bug in CV::VideoCapture::open()?

本文关键字:一个 错误 VideoCapture CV open      更新时间:2023-10-16

我使用CV::VideoCapture从IP摄像机捕获帧。它大多数时候都能工作,但有时会报告错误:

[mjpeg @ 0x233aea0] overread 8

当这个错误发生时,我的程序就停留在那里了。这也许可以解释为什么。但是我如何用C++代码来解决它呢?OpenCV可以在不终止程序的情况下处理此错误吗?

p.s.我发现,如果我没有立即调用CV::VideoCapture::read(),而是在CV::VideoCapture::open()之后等待一段时间,比如60秒,每次都会出现这个错误!这是OpenCV的一个bug吗?

#include <unistd.h>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
int main(int argc, char* argv[]) {
  // argv[1] is a valid url, like "http://xxxx/mjpg/video.mjpg"
  cv::VideoCapture cap(argv[1]);
  if (!cap.isOpened()) {
    std::cout << "Cannot Open Camera!" << std::endl;
    return -1;
  }
  // The error occures if I pause for a while.
  // But it is okay when I capture frames from video files intead of IP camera.
  sleep(60);
  while (static_cast<char>(cv::waitKey(1)) != 'q') {
    cv::Mat frame;
    cap >> frame;
    if (frame.empty()) break;
    cv::imshow("frame", frame);
  }
}

我无法解释原因,但使用地址http://xxxx/axis-cgi/mjpg/video.cgi而不是http://xxxx/mjpg/video.mjpg解决了问题!有人能在这里提供一些很好的解释,或者一些链接吗?谢谢

相关文章: