2016-08-14 7 views
0

Ich arbeite an Bildverarbeitung (OpenCC 3.0, C++).Video von einer bestimmten Zeit aufzeichnen mit OpenCV in C++

Eigentlich, was ich versuche zu tun:

  1. Nimm ein Video als 1 Minute (das ist meine Frage)
  2. Nach der Aufnahme eines Videos aufgezeichnetes Video gelesen (ich werde nach dem ersten Schritt, diesen Schritt tun ist gelöst)
  3. Erforderlichen Bildverarbeitungsprozess (Ich habe diesen Schritt bereits getan)
  4. Gehen Sie zurück zu Zustand 1 und den gleichen Prozess bis zum Abschluss der Bestellung.

Ich füge Code für state 1 an. (Dieser Code, Video aufzeichnen und auf Datei schreiben, bis ESC-Taste drücken.)

Könnten Sie mir helfen, wie kann ich Video für 1 Minute oder 10 Minuten oder eine bestimmte Zeit aufzeichnen?

Ich möchte Videos für 1 Minute Periode aufnehmen.

#include "opencv2/opencv.hpp" 
#include <iostream> 

using namespace std; 
using namespace cv; 

int main() { 

    VideoCapture vcap(0); 
    if (!vcap.isOpened()) { 
     cout << "Error opening video stream or file" << endl; 
     return -1; 
    } 

    int frame_width = vcap.get(CV_CAP_PROP_FRAME_WIDTH); 
    int frame_height = vcap.get(CV_CAP_PROP_FRAME_HEIGHT); 
    VideoWriter video("/MyVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 10, Size(frame_width, frame_height), true); 

    for (;;) { 

     Mat frame; 
     vcap >> frame; 
     video.write(frame); 
     imshow("Frame", frame); 
     char c = (char)waitKey(33); 
     if (c == 27) break; 
    } 
    return 0; 
}` 

Das funktioniert.

Hier ist mein Code. Ich habe versucht, 10 Sekunden Videos in meinem letzten Code zu bekommen, aber ich habe 16 Sekunden Videos. Kannst du erklären, warum das so ist?

#include "opencv2/opencv.hpp" 
#include <iostream> 
#include <ctime> 
#include <cstdio> 
#include <time.h> 
#include <stdio.h> 

    using namespace std; 
    using namespace cv; 

    int main() { 

     //////////////////// Added Part 
     time_t start, end; 
     //////////////////// Added Part 
     VideoCapture vcap(0); 
     if (!vcap.isOpened()) { 
      cout << "Error opening video stream or file" << endl; 
      return -1; 
     } 
     int frame_width = vcap.get(CV_CAP_PROP_FRAME_WIDTH); 
     int frame_height = vcap.get(CV_CAP_PROP_FRAME_HEIGHT); 
     VideoWriter video("C:\\Users\\lenovo\\Desktop\\OpenCV Webcam Video Record With R Key\\WebcamRecorder\\WebcamRecorder\\data\\MyVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 10, Size(frame_width, frame_height), true); 

     //////////////////// Added Part 
     time(&start); 
     //////////////////// Added Part 

     for (;;) { 

      Mat frame; 
      vcap >> frame; 
      video.write(frame); 
      imshow("Frame", frame); 
      char c = (char)waitKey(33); 
      if (c == 27) break; 

      //////////////////// Added Part 
      time(&end); 
      double dif = difftime(end, start); 
      printf("Elasped time is %.2lf seconds.", dif); 
      if (dif==10) 
      { 
       std::cout << "DONE" << dif<< std::endl; 
       break; 
      } 
      //////////////////// Added Part 
     } 
     return 0; 
    } 
+0

Es ist nicht ganz klar, was Sie fragen.Können Sie Ihre Frage bearbeiten, um sie etwas klarer zu machen? –

+0

Ich habe meinen Freund bearbeitet. Ich hoffe, du kannst es jetzt verstehen. –

Antwort

0

wie kann ich ein Video 1 min oder 10 min oder eine bestimmte Zeit aufzeichnen?

Kurz vor dem for-Schleife eine Uhr startet die aktuelle Zeit und speichern Sie es auf eine Variable START_TIME genannt zu bekommen.

Gerade unter diesem Code innerhalb der for-Schleife

char c = (char)waitKey(33); 
     if (c == 27) break; 

eine andere Variable verwenden aktuelle Zeit zu erhalten, nennen Sie es cur_time.

subtrahieren START_TIME von cur_time zu bekommen Zeit verstrichen ist. Wenn Sie sehen, dass es die Zeit mit einem wenn Bedingung dann Pause die Schleife erreicht.

Sie die cur_time Variable innerhalb for-Schleife, es nicht erklären, erklären vor.

können Sie diese Referenz verwenden Easily measure elapsed time

+0

Ich denke, ich habe. Das ist Arbeit. –

Verwandte Themen