使用opencv检索视频帧 - 未处理的异常

Posted

技术标签:

【中文标题】使用opencv检索视频帧 - 未处理的异常【英文标题】:Retrieving video frames using opencv - unhandled exception 【发布时间】: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 【参考方案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。

以上是关于使用opencv检索视频帧 - 未处理的异常的主要内容,如果未能解决你的问题,请参考以下文章

OpenCv - 输出视频未播放

在 OpenCV 中检索当前帧号

未考虑 Java OpenCV VideoCapture 属性。需要避免最新帧的“当真”。多相机环境

OpenCV-Python:如何从实时视频流中获取最新帧或跳过旧帧

如何使用 OpenCV 和 Python 在视频流中逐帧处理视频图像

在 Android 上的 OpenCV 中逐帧处理视频