วันจันทร์ที่ 23 มกราคม พ.ศ. 2560

C++ opencv Save Video

#include <opencv\highgui.h>
#include <opencv\cv.h>
#include <iostream>

using namespace cv;
using namespace std;

string intToString(int number){


 std::stringstream ss;
 ss << number;
 return ss.str();
}

int main(int argc, char* argv[])
{
 bool recording = false;
 bool startNewRecording = false;
 int inc=0;
 bool firstRun = true;

 VideoCapture cap(0); // open the video camera no. 0
 VideoWriter oVideoWriter;//create videoWriter object, not initialized yet

 if (!cap.isOpened())  // if not success, exit program
 {
  cout << "ERROR: Cannot open the video file" << endl;
  return -1;
 }

 namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); //create a window called "MyVideo"

 double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //get the width of frames of the video
 double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //get the height of frames of the video

 cout << "Frame Size = " << dWidth << "x" << dHeight << endl;

 //set framesize for use with videoWriter
 Size frameSize(static_cast<int>(dWidth), static_cast<int>(dHeight));


 while (1) {

  if(startNewRecording==true){

   
   oVideoWriter  = VideoWriter("D:/MyVideo"+intToString(inc)+".avi", CV_FOURCC('D', 'I', 'V', '3'), 20, frameSize, true); //initialize the VideoWriter object 
   //oVideoWriter  = VideoWriter("D:/MyVideo"+intToString(inc)+".avi", (int)cap.get(CV_CAP_PROP_FOURCC), 20, frameSize, true); //initialize the VideoWriter object 

   recording = true;
   startNewRecording = false;
   cout<<"New video file created D:/MyVideo"+intToString(inc)+".avi "<<endl;


   if ( !oVideoWriter.isOpened() ) //if not initialize the VideoWriter successfully, exit the program
   {
    cout << "ERROR: Failed to initialize video writing" << endl;
    getchar();
    return -1;
   }

  }


  Mat frame;

  bool bSuccess = cap.read(frame); // read a new frame from video

  if (!bSuccess) //if not success, break loop
  {
   cout << "ERROR: Cannot read a frame from video file" << endl;
   break;
  }

  //if we're in recording mode, write to file
  if(recording){

   oVideoWriter.write(frame);
   //show "REC" in top left corner in red
   //be sure to do this AFTER you write to the file so that "REC" doesn't show up
   //on the recorded video.
   putText(frame,"REC",Point(0,60),2,2,Scalar(0,0,255),2);


  }
  imshow("MyVideo", frame); //show the frame in "MyVideo" window


  switch(waitKey(10)){

  case 114:
   //'r' has been pressed.
   //toggle recording mode
   recording =!recording;

   if(firstRun == true){

    cout << "New Recording Started" << endl;
    oVideoWriter  = VideoWriter("D:/MyVideo0.avi", CV_FOURCC('D', 'I', 'V', '3'), 20, frameSize, true);

    if ( !oVideoWriter.isOpened() ) 
   {
    cout << "ERROR: Failed to initialize video writing" << endl;
    getchar();
    return -1;
   }
    firstRun = false;


   }
   else {if (!recording)cout << "Recording Stopped" << endl;

   else cout << "Recording Started" << endl;
   }
   break;

  case 110:
   //'n' has been pressed
   //start new video file
   startNewRecording = true;
   cout << "New Recording Started" << endl;
   //increment video file name
   inc+=1;
   break; 
  case 27:
   //'esc' has been pressed
   //exit program.
   cout << "Exit Program" << endl;
   return 0;



  }


 }

 return 0;

}
////////////////////////////////////////////////////////////////////////////////////////////

#include <opencv\highgui.h>
#include <opencv\cv.h>
#include <iostream>

using namespace cv;
using namespace std;

string intToString(int number){


 std::stringstream ss;
 ss << number;
 return ss.str();
}

int main(int argc, char* argv[])
{

 VideoCapture cap(0); // open the video camera no. 0

 cv::VideoWriter writer;


 if (!cap.isOpened())  // if not success, exit program
 {
  cout << "ERROR INITIALIZING VIDEO CAPTURE" << endl;
  return -1;
 }


 char* windowName = "Webcam Feed";
 namedWindow(windowName,CV_WINDOW_AUTOSIZE); //create a window to display our webcam feed

 //filename string

 string filename = "D:\myVideo.avi";

 //fourcc integer
 
 int fcc = CV_FOURCC('D','I','V','3');

 //frames per sec integer

 int fps = 10;

 //frame size

 cv::Size frameSize(cap.get(CV_CAP_PROP_FRAME_WIDTH),cap.get(CV_CAP_PROP_FRAME_HEIGHT));


 writer = VideoWriter(filename,fcc,fps,frameSize);

 if(!writer.isOpened()){

  cout<<"ERROR OPENING FILE FOR WRITE"<<endl;
  getchar();

  return -1;
 }

 Mat frame;

 while (1) {

  

  bool bSuccess = cap.read(frame); // read a new frame from camera feed

  if (!bSuccess) //test if frame successfully read
  {
   cout << "ERROR READING FRAME FROM CAMERA FEED" << endl;
   break;
  }

  writer.write(frame);
  
  imshow(windowName, frame); //show the frame in "MyVideo" window

  //listen for 10ms for a key to be pressed
  switch(waitKey(10)){

  case 27:
   //'esc' has been pressed (ASCII value for 'esc' is 27)
   //exit program.
   return 0;

  }


 }

 return 0;

}
////////////////////////////////////////////////////////////////////////////////////////////

ไม่มีความคิดเห็น:

แสดงความคิดเห็น