在centos上读取下一个视频帧时如何解决分段错误

时间:2019-02-26 12:14:04

标签: c++ opencv video-capture centos6

我在Centos6.8上运行了此程序,我总是遇到 分段错误 (核心已转储)

我还使用了 GDB 进行调试,它说

Program received signal SIGSEGV, Segmentation fault.
memcpy () at ../sysdeps/x86_64/memcpy.S:398
398     movq    48(%rsi), %r13

但是当我在Ubuntu18.04上运行此相同程序时,它运行良好。

我想在Centos上安装任何东西吗,或者我需要更改另一个API来读取框架。

顺便说一句,我一开始可以读取四个帧,之后出现分割错误

Opencv版本=> 2.4.9

非常感谢。

#include <iostream>
#include <math.h>
#include <chrono>
#include <opencv2/opencv.hpp>
#include <fstream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
    Mat image;
    int a;
    VideoCapture video("15_41_24_24670.avi");
    int i = 0;
    try{
        while(true){
            video >> image;
            if(image.empty())
                break;
            cout << i++ <<endl;
        }
    }
    catch(std::exception& e){
        std::cerr << "Exception caught : " << e.what() << std::endl;
        cout<<"error"<<endl;
        return 0;
    }
    cout<<"successful"<<endl;
    return 0;
}

输出:

0
1
2
3
4
5
6
Segmentation fault (core dumped)

1 个答案:

答案 0 :(得分:1)

尝试为VideoCapture设置后端:

VideoCapture video(“ 15_41_24_24670.avi”,cv :: CAP_FFMPEG);

VideoCapture视频(“ 15_41_24_24670.avi”,cv :: CAP_GSTREAMER);

或其他任何东西