2017-02-16 8 views
-1

私はビデオフレームを抽出してビデオにリメイクする際に小さなプロジェクトを作っています。 シーケンスイメージを再びビデオに戻す方法は?opencvでシーケンス画像を使ってビデオを作る方法

ここに私の抽出ビデオフレームコードの一部です。

if (n_frame % 3 == 0) 
     { 
      //Save an image 
      sprintf(filename, "frame%.3d.jpg", n_save++); 
      imwrite(filename, frame); 
      cout << "save: " << filename << endl; 

     } 

私は自分の画像をframe000、frame001、frame002 ....という名前にしました。

私はopencv 2.4.11を使用しています。

ありがとうございます!

+0

ログイン[THIS PAGE](http://stackoverflow.com/questions/13623394/how-to-write-video-file-in-opencv-2-4-3?rq=1) –

+0

可能[OpenCV 2.4.3でビデオファイルを書き込む方法]の複製(http://stackoverflow.com/questions/13623394/how-to-write-video-file-in-opencv-2-4-3) –

答えて

0

あなたはVideoWriterを必要とする - http://docs.opencv.org/trunk/dd/d9e/classcv_1_1VideoWriter.html

希望するファイルタイプとパスでそれを構築したら、あなたは< <演算子を使用してフレームを含むマットオブジェクトとそれを養う - すなわち

auto frame = cv::imread("somePicture.png"); 
auto writer = cv::VideoWriter("out.avi", VideoWriter::fourcc('M','J','P','G'), 24, frame.size()); 
writer << frame; 
writer.release(); 

上記のコードが読み込まれますフレームからファイルを取り出し、それを24fpsとMJPG形式とAVIコンテナを持つビデオファイルに送り、release()メソッドでライターを閉じます。

0

あなたはFFmpegFrameRecorder

文字列のパス= Environment.getExternalStorageDirectory()ある、getPath()+ "/ Video_images" を使用。

 File folder = new File(path); 

     File[] listOfFiles = folder.listFiles(); 

     if (listOfFiles.length > 0) { 

      iplimage = new opencv_core.IplImage[listOfFiles.length]; 

      for (int j = 0; j < listOfFiles.length; j++) { 

       String files = ""; 

       if (listOfFiles[j].isFile()) { 
        files = listOfFiles[j].getName(); 
        System.out.println(" j " + j + listOfFiles[j]); 
       } 

       String[] tokens = files.split("\\.(?=[^\\.]+$)"); 
       String name = tokens[0]; 

       iplimage[j] = cvLoadImage(Environment.getExternalStorageDirectory().getPath() + "/Video_images/" + name + ".jpg"); 

      }  

レコーダー=新しいFFmpegFrameRecorder(Constn.SS、480、480);

 try { 
      recorder.setVideoCodec(13); 
      recorder.setFrameRate(0.4d); 
      recorder.setPixelFormat(0); 
      recorder.setVideoQuality(1.0d); 
      recorder.setVideoBitrate(4000); 
      startTime = System.currentTimeMillis(); 
      recorder.start(); 
      int time = Integer.parseInt(params[0]); 
      resp = "Slept for " + time + " milliseconds"; 
      for (int i = 0; i < iplimage.length; i++) { 
       long t = 1000 * (System.currentTimeMillis() - startTime); 
       if (t < recorder.getTimestamp()) { 
        t = recorder.getTimestamp() + 1000; 
       } 
       recorder.setTimestamp(t); 
       recorder.record(iplimage[i]); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
関連する問題