【问题标题】:Retrieving video frames using opencv - unhandled exception使用opencv检索视频帧 - 未处理的异常
【发布时间】:2013-05-15 14:35:53
【问题描述】:

我使用cvQueryframes 获取视频帧,但在avi 文件的少数视频中我得到:

Unhandled exception at 0x715c14f0 0xC0000005: 
    Access violation reading location 0x02f509f0.

我正在使用 OpenCV 2.4.5Qt5 的 Visual Studio 2010

CvCapture* cap= cvCaptureFromFile(file);
frame = cvQueryFrame(capture);

【问题讨论】:

  • 您需要更具体。显示代码会有所帮助,因为您似乎在做一些不安全的事情,比如在数组边界之外读取。
  • 请给你的问题加分。它的工资。
  • 你的调试器说什么?
  • CvCapture* cap= cvCaptureFromFile(file);帧 = cvQueryFrame(捕获);我得到异常的代码
  • 我猜你拼错了capcapture。如果您尝试打开VfW 不支持的文件,您应该检查cvCaptureFromFile 的返回值,即NULL

标签: c++ qt opencv


【解决方案1】:

这可能有多种原因,链接错误的文件名,未找到编解码器等。尝试在打开文件之前放置调试 printf 以查看文件名是否正确,如果它不为 NULL,请检查上限。你可以试试这样的

int main(int argc, char*argv[])
{

    char *my_file = "C:\\vid_an2\\desp_me.avi";
    std::cout<<"Video File "<<my_file<<std::endl;
    cv::VideoCapture input_video;

    if(input_video.open(my_file))
    {
         std::cout<<"Video file open "<<std::endl;
    }
    else
    {
        std::cout<<"Not able to Video file open "<<std::endl;

    }
    namedWindow("My_Win",1);
    namedWindow("Segemented", 1);
    Mat cap_img;
    for(;;)
    {
         input_video >> cap_img;
         imshow("My_Win", cap_img);
          waitKey(0);
    }
   return 0;
 }

【讨论】:

  • 谢谢你的好回答,我会试着告诉你,我已经检查过文件是否为空,无论如何,非常感谢你
  • 请注意,您使用的是 OpenCV 的 C++ 接口,而 OP 使用的是 C 接口。
  • 是的,上面是C++接口。另外我建议检查是否有其他使用 CAM 的应用程序。如果是,那么最好先关闭它。
  • 上述代码抛出异常,“OpenCVTestApp.exe 中 0x754bc6e3 处未处理的异常:Microsoft C++ 异常:内存位置 0x001df568 处的 cv::Exception..”请帮助我进一步困惑
  • 以上代码用于测试目的。您需要将文件名("C:\\vid_an2\\desp_me.avi";) 更改为系统上存在的其他文件名。如果它不起作用,请尝试使用 OpenCV 加载一个简单的 jpg 图像,以确保您的 opencv 安装正确,否则您需要重新安装您的 opencv。
猜你喜欢
  • 2015-08-28
  • 2019-01-11
  • 1970-01-01
  • 2021-03-08
  • 2014-02-04
  • 2021-12-02
  • 2012-10-23
  • 1970-01-01
  • 2011-12-31
相关资源
最近更新 更多