2017-02-16 18 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; 

     } 

Я назвал свои фоторамки000, frame001, frame002 .... и т.д.

Я использую opencv 2.4.11.

Большое спасибо!

+0

Визит [эту страницу] (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(); 

Код выше будет читать кадр из файла, подать его в видеофайл, который имеет 24 кадра в секунду, формат 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(); 
     }