67 lines
2 KiB
C++
67 lines
2 KiB
C++
/**
|
|
@file videowriter_basic.cpp
|
|
@brief A very basic sample for using VideoWriter and VideoCapture
|
|
@author PkLab.net
|
|
@date Aug 24, 2016
|
|
*/
|
|
|
|
#include <opencv2/core.hpp>
|
|
#include <opencv2/videoio.hpp>
|
|
#include <opencv2/highgui.hpp>
|
|
#include <iostream>
|
|
#include <stdio.h>
|
|
|
|
using namespace cv;
|
|
using namespace std;
|
|
|
|
int main(int, char**)
|
|
{
|
|
Mat src;
|
|
// use default camera as video source
|
|
VideoCapture cap(0);
|
|
// check if we succeeded
|
|
if (!cap.isOpened()) {
|
|
cerr << "ERROR! Unable to open camera\n";
|
|
return -1;
|
|
}
|
|
// get one frame from camera to know frame size and type
|
|
cap >> src;
|
|
// check if we succeeded
|
|
if (src.empty()) {
|
|
cerr << "ERROR! blank frame grabbed\n";
|
|
return -1;
|
|
}
|
|
bool isColor = (src.type() == CV_8UC3);
|
|
|
|
//--- INITIALIZE VIDEOWRITER
|
|
VideoWriter writer;
|
|
int codec = VideoWriter::fourcc('M', 'J', 'P', 'G'); // select desired codec (must be available at runtime)
|
|
double fps = 25.0; // framerate of the created video stream
|
|
string filename = "./live.avi"; // name of the output video file
|
|
writer.open(filename, codec, fps, src.size(), isColor);
|
|
// check if we succeeded
|
|
if (!writer.isOpened()) {
|
|
cerr << "Could not open the output video file for write\n";
|
|
return -1;
|
|
}
|
|
|
|
//--- GRAB AND WRITE LOOP
|
|
cout << "Writing videofile: " << filename << endl
|
|
<< "Press any key to terminate" << endl;
|
|
for (;;)
|
|
{
|
|
// check if we succeeded
|
|
if (!cap.read(src)) {
|
|
cerr << "ERROR! blank frame grabbed\n";
|
|
break;
|
|
}
|
|
// encode the frame into the videofile stream
|
|
writer.write(src);
|
|
// show live and wait for a key with timeout long enough to show images
|
|
imshow("Live", src);
|
|
if (waitKey(5) >= 0)
|
|
break;
|
|
}
|
|
// the videofile will be closed and released automatically in VideoWriter destructor
|
|
return 0;
|
|
}
|