2016-08-14 5 views
0

私は画像処理に取り組んでいます(OpenCC 3.0、C++)。C++でOpenCVを使用して特定の時間のビデオを録画する

実は、私は何をしようとしていることである:1分として

  1. 動画で(それは私の質問です)
  2. 映像を記録した後、録画したビデオを読んで(私が最初のステップの後に、この手順を行います
  3. 必要な画像処理を行います(すでにこの手順を実行しました)
  4. 状態1に戻り、終了するまで同じ処理を行います。

state 1のコードを添付しています。 (このコードは、ビデオを録画し、ESCキーを押すまでファイルに書き込みます。)

1分または10分または特定の時間のビデオを録画するにはどうすればよいですか?

1分間の動画を録画します。

#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; 
}` 

これは機能しています。

ここに私のコードです。私は最後のコードで10秒のビデオを取得しようとしていたが、私は16秒のビデオを持っていた。なぜそれが説明できますか?

#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

あなたが求めていることはあまり明確ではありません。質問を編集してもう少し明確にすることはできますか? –

+0

私は私の友達を編集しました。私はあなたが今理解できることを願っています。 –

答えて

0

どのように私はビデオ1分または10分または任意の特定の時間を記録することができますか?

直前に現在の時刻を取得し、のstart_timeという変数にそれを格納するためのクロックを開始ループため。 forループ内部ただ、このコードは以下の

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

現在の時間を取得するために別の変数を使用して、名前はcur_time

減算start_timecur_timeから時間が経過します。 あなたが条件場合、それはを使用して、時間に達したことを確認した場合、ブレークループ

は前にそれを宣言し、ループためcur_time変数を宣言しないでください。

この参照を使用できます。Easily measure elapsed time

+0

私はそう思いました。それが仕事です。 –

関連する問題