Ask Your Question

ege's profile - activity

2013-10-09 07:05:50 -0600 asked a question reading uncompressed video error

Hi everyone, is there anyone who can manage read uncompressed video file by using opencv videocapture class? I wrote a video with fourcc= I420 and with container .avi by using videowriter class. I can watch it by using gom player but I can't play it by using opencv code. I need to mention that I can play any other compressed avi files by using this code I wrote. Is there a bug in Opencv for reading uncompressed video files? The code I wrote for converting compressed video to uncompressed video.

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>
#include <iostream>



using namespace std;
using namespace cv;


int main( int argc, char *argv[] )
{
    VideoCapture capture(argv[1]);

    Mat frame;

    cout << "# of frame:" << capture.get(CV_CAP_PROP_FRAME_COUNT) << endl;

    int frame_number = 1;
    if(!capture.isOpened())
    {   
        return 1;
    }   
    double rate = capture.get(CV_CAP_PROP_FPS);
    int width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
    int height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
    //int fourcc = capture.get(CV_CAP_PROP_FOURCC);
    //int fourcc = CV_FOURCC('I','Y','U','V');
    int fourcc = CV_FOURCC('I','4','2','0');
    //int fourcc = -1;

    Size size(width, height);
    VideoWriter my_video("E:\\video_conversion.avi", fourcc, rate, size);

    while(true)
    {
        if(frame_number > 150)
            break;
        cout << frame_number<<endl; 
        if(capture.grab())
        {
        if( capture.retrieve(frame));
        }
    my_video.write(frame);
        frame_number++;
    }
    capture.release();
}

The code I try to read uncompressed video

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main( int argc, char *argv[] )
{
    VideoCapture capture(argv[1]);
    Mat frame;

    cout << "# of frame:" << capture.get(CV_CAP_PROP_FRAME_COUNT) << endl;

    int frame_number = 1;
    if(!capture.isOpened())
    {
        return 1;
    }

    while(true)
    {
        if(frame_number > 150)
            break;
        cout << frame_number<<endl; 
        if(capture.grab())
        {   
            if( capture.retrieve(frame));   
        }

        imshow("video", frame);
        int c = waitKey(33);
        if(c ==27) break;

        frame_number++; 
    }
    capture.release();
}