# Problem in opening video file using captureVideo

Hi All, I'm kind of new to opencv and would very much appreciate your help on solving the following problem: (I have Visual studio C++ 2010 and OpenCV 2.4.4 installed.)

I am trying to open a video from a file using captureVideo(filename). When I do this I can read the correct frame rate and a resolution of my video file (also the type of a codec). When I use imshow to show the first frame the resolution of my window is correct, but the image is all grey. When I enter the while(1) loop and try to get a new frame, the read resolution is [something x 0], the frame rate is 0 and the codec is not given. I have tried this for both release and debug modes (32bits) with exactly the same effect. However, when I use a very similar code to capture video from a webcam everything works fine.

int TipTracking(char directive[], char filename[]);

using namespace std; using namespace cv;

int main(int argc, const char* argv[]) { TipTracking("-v","filename"); }

int TipTracking(char directive[], char filename[]) {

cv::VideoCapture captureVideo;              // declares video device _FILE
cv::Mat captureFrame, MatEdges;             // declares frame matrices

if(directive == "-v" )
{
VideoCapture captureVideo(              // open the video file for reading
filename
);

if (!captureVideo.isOpened())           // if not success, exit program
{
cout << "Cannot open the video file" << endl;   // command line text
return -1;
}

fps = captureVideo.get(
CV_CAP_PROP_FPS     // get the frames per seconds of the video
);

captureFrame
);

if (false == bSuccess)              // if not success, exit the program
{
cout << "Cannot read from the video file" << endl;
return -1;
}

FrameSize = Size(               // declare FrameSize as a size of a frame
captureFrame.cols,
captureFrame.rows
);

codecType = captureVideo.get(           // Get Codec Type- Int form
CV_CAP_PROP_FOURCC
);

char codecType_char [] = {          // Transform from int to char via Bitwise operators
(char)(codecType & 0XFF) ,
(char)((codecType & 0XFF00) >> 8),
(char)((codecType & 0XFF0000) >> 16),
(char)((codecType & 0XFF000000) >> 24),
0
};

cout << "\n" << endl;
cout << "Video source: FILE" << endl;
cout << "Frame per seconds : " << fps << endl;
cout << "Frame size (rows x cols): " << FrameSize << endl;
cout << "Codec type: " << codecType_char << endl;

imshow(         // show the image (the image window is in correct resolution but all gray only)
"outputCapture",
captureFrame
);
}

cout << "Press ENTER to continue..." << endl;
std::cin.get();

while(1)
{

captureFrame
);

fps = captureVideo.get(
CV_CAP_PROP_FPS         //get the frames per seconds of the video
);

FrameSize = Size(           // declare FrameSize as a size of a frame
captureFrame.cols,
captureFrame.rows
);

codecType = captureVideo.get(           // Get Codec Type- Int form
CV_CAP_PROP_FOURCC
);

char codecType_char [] = {          // Transform from int to char via Bitwise operators
(char)(codecType & 0XFF) ,
(char)((codecType & 0XFF00) >> 8),
(char)((codecType & 0XFF0000) >> 16),
(char)((codecType & 0XFF000000) >> 24),
0
};

cout << string(1, '\n');
cout << "\n" << endl;
cout << "Video source: FILE" << endl;
cout << "Frame per seconds : " << fps << endl;
cout << "Frame size (rows x cols): " << FrameSize << endl;
cout << "Codec type: " << codecType_char << endl;

imshow(                     // show the image
"outputCapture",
captureFrame
);
waitKey(100);                   //pause for 100ms
}
return 0;


}

edit retag close merge delete