OpenCV2.4.2视频捕获上未处理的异常

OpenCV2.4.2视频捕获上未处理的异常,opencv,cmake,Opencv,Cmake,我刚刚安装了OpenCV2.4.2,并使用CMake创建了一个OpenCV项目。我没有得到任何编译错误。我有几个处理图像的功能,我有两个应用程序: 1-处理视频中的数据 2-处理模拟数据 除了从视频中提取数据外,这两个应用程序是相同的 问题:处理视频的应用程序崩溃 program.exe访问冲突中0x75d8a048处的未处理异常 读取位置0x049f08c0 在读取帧时,这部分代码会崩溃: cv::VideoCapture _video; while(1) {

我刚刚安装了OpenCV2.4.2,并使用CMake创建了一个OpenCV项目。我没有得到任何编译错误。我有几个处理图像的功能,我有两个应用程序:

1-处理视频中的数据

2-处理模拟数据

除了从视频中提取数据外,这两个应用程序是相同的

问题:处理视频的应用程序崩溃

program.exe访问冲突中0x75d8a048处的未处理异常 读取位置0x049f08c0

在读取帧时,这部分代码会崩溃:

cv::VideoCapture _video;
while(1) 
{       
        // grab the frame
        _video >> frame;  <-------------CRASHES HERE
                processFrame(frame);
}

您是否正在检查捕获是否确实打开了文件/相机

    if(_video.isOpened()) {  // check if capture succeeded
      // do stuff
    }
默认情况下,并非所有编解码器都受支持。这取决于您在下面打开视频时使用的库。(这可能是ffmpeg或quicktime)

此外,您还可以自己捕获异常,以便为将来的问题着想

try {
    _video >> frame;
} catch (cv::Exception) {
    cout << "An exception has accurred" << endl;
};
试试看{
_视频>>帧;
}捕获(cv::异常){

我不需要看你的一些实际代码。你可以调试并查看到底发生了什么我尝试了另一个视频,它可以工作,但视频是粉红色的屏幕,与原始视频无关。可能与编解码器有关吗?我使用视频。avi@CarlosCachalote您是否在调试模式下运行?因为您可能缺少opencv_ffm的调试dllPEG242是的,我正在检查并打开它。我使用录制的视频。一切都做得很好,因为我在OpenCV 2.3.1中使用了这段代码,它没有出现问题。这可能是所使用的视频库的问题,通过调试器运行它可以让您更清楚地了解在哪个调用,以及它实际导致问题的视频子系统。我尝试了异常处理程序失败,但程序崩溃并停止,因此无法捕获异常。它在代码的第二行停止…根据opencv“调试库”构建代码链接,并在_video>>帧行设置断点。然后启动调试器,运行程序,一旦命中断点,通过>>操作上的调用逐步执行erator。它应该可以让您了解访问受保护/错误内存对象的原因。一种可能是子系统之间的链接断开(您正在链接较旧版本的dll)。因为有些编解码器似乎可以工作,有些则会使系统崩溃。解码器应该会引发错误,而不是崩溃。您可能要做的是使用视频支持重新构建opencv(以防重新安装无法解决问题)
try {
    _video >> frame;
} catch (cv::Exception) {
    cout << "An exception has accurred" << endl;
};