无法使用opencv捕获avi文件

时间:2017-04-30 03:33:08

标签: c++ opencv makefile ffmpeg

我对c ++编译很新。我正在尝试使用opencv处理一个简单的问题,我在其中读取视频文件并显示它。

我的代码如下:

#include <opencv/cv.h>
#include <opencv/highgui.h>
#include "opencv2/opencv.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>


#include <ctype.h>
#include <unistd.h>

#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <fstream>
#include <iostream>
#include <vector>
#include <list>
#include <string>


using namespace cv;

IplImage* image = 0; 
IplImage* prev_image = 0;

int show = 1; 

int main( int argc, char** argv )
{
    int frameNum = 0;

    char* video = argv[1];
    VideoCapture capture(video);

    if( !capture.isOpened() ) { 
        printf( "Could not initialize capturing..\n" );
        return -1;
    }

    if( show == 1 )
        cvNamedWindow( "Video", 0 );

    while( true ) {
        IplImage* frame = 0;
        int i, j, c;

        // get a new frame
        //frame = cvQueryFrame( capture );
        Mat mat_img;
        capture >> mat_img;
        IplImage frame1 = mat_img.operator IplImage();
        frame = &frame1;
        if( !frame )
            break;

        if( !image ) {
            image =  cvCreateImage( cvSize(frame->width,frame->height), 8, 3 );
            image->origin = frame->origin;
        }

        cvCopy( frame, image, 0 );

        if( show == 1 ) {
            cvShowImage( "Video", image);
            c = cvWaitKey(3);
            if((char)c == 27) break;
        }

        std::cerr << "The " << frameNum << "-th frame" << std::endl;
        frameNum++;
    }

    if( show == 1 )
        cvDestroyWindow("Video");

    return 0;
}

然后我编译它:

g++ test.cpp -o Video -pipe -D __STDC_CONSTANT_MACROS -D STD=std -Wall -I. -I/usr/local/ -O3 -DNDEBUG -ggdb -L/usr/local/ -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc -lavformat -lavdevice -lavutil -lavcodec -lswscale

编译工作正常,没有返回错误。

但是,当我运行它时,我得到了:

(Video:5651): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed
Could not initialize capturing..

其他一些信息: 1.我通过运行简单的示例来测试我的opencv和ffmpeg,这些示例运行良好。 2.我可以从相机中流式传输帧并使用opencv显示它。

任何人都知道导致这种情况的原因是什么?

任何想法都表示赞赏。

0 个答案:

没有答案