在opencv中的视频阅读

时间:2013-09-02 16:37:56

标签: opencv

我是opencv的新手。我正在尝试阅读视频mp4文件,但我的代码总是说无法打开视频设备或文件。我已将视频文件放在代码文件夹中。

VideoCapture capture;


capture.open("a.mp4");  // Open file


if (!capture.isOpened())
{
    cout << "Cannot open video device or file!" << endl;
    getch();
    return -1;
}

Mat frame;
namedWindow("video", CV_WINDOW_AUTOSIZE);

while(true)
{
    capture >> frame;
    if (frame.empty())
        break;
    imshow("video", frame);
    if (waitKey(30) == 'q')
        break;
}   

2 个答案:

答案 0 :(得分:1)

如果有人像我一样遇到这个问题,我会发布这个答案。

我正面临几乎同样的问题,试图打开一个视频文件。我的代码与.avi一起使用,但无法打开包含.mp4个文件的文件。

原来openCV需要在系统上安装ffmpeg解码器。对于Windows操作系统,您需要将opencv_ffmpeg2411.dll文件复制到C:\Windows\System32目录中。可以在OpenCV 提取的目录中找到DLL不同的系统。

希望这有助于某人。

答案 1 :(得分:-3)

这是正确的视频和图像阅读代码。我不知道确切的错误是什么。但是,从orieally使用不同的代码可以帮助我以不同的方式完成我的任务。

// newproject.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "highgui.h"
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <conio.h>
#include <opencv2/imgproc/imgproc.hpp>  // Gaussian Blur
#include <opencv2/core/core.hpp>        // Basic OpenCV structures (cv::Mat, Scalar)
#include <opencv2/highgui/highgui.hpp>

#include <iostream>
#include <conio.h>

using namespace cv;
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    //Image Reading
    IplImage* img = cvLoadImage( "b.jpg" );
    cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
    cvShowImage( "Example1", img );
    cvWaitKey(0);
    cvReleaseImage( &img );
    cvDestroyWindow( "Example1" );

    //Video Reading

//  cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );

//  CvCapture* capture = cvCreateFileCapture( "video.avi" );
//  IplImage* frame;

    /*  while(1) {
        frame = cvQueryFrame( capture );
        if( !frame ) break;
        cvShowImage( "Example2", frame );
        char c = cvWaitKey(33);
        if( c == 27 ) break;//if user enter escape key then exit
    }*/

    //Summarize by sampling
    CvCapture* capture = 0;
    capture = cvCreateFileCapture( "video.avi" );
    if(!capture){
        return -1;
    }
    IplImage *bgr_frame=cvQueryFrame(capture);//Init the video read
    double fps = cvGetCaptureProperty (capture,CV_CAP_PROP_FPS);

    CvSize size = cvSize((int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT));
    //double fps = cvGetCaptureProperty (capture,CV_CAP_PROP_FPS);
    CvVideoWriter *writer = cvCreateVideoWriter("Ayesha",CV_FOURCC('M','J','P','G'),fps,size);

    int x=0;
    while(1){
    x++;
        bgr_frame = cvQueryFrame( capture );
        if(!bgr_frame)
            break;

        if(x==19||x==21){
            cvShowImage("Example2",bgr_frame);
            cvWriteFrame( writer, bgr_frame );
        }

        if(x==20){
            cvShowImage("Example2",bgr_frame);
            cvWriteFrame( writer, bgr_frame );
            x=0;
        }
        char c=cvWaitKey(30);
        if (c==27) break;
    }

    cvReleaseVideoWriter( &writer );
    cvReleaseCapture( &capture );
    cvDestroyWindow( "Example2" );
}