Как записать видео с помощью java и OpenCV

В предыдущих примерах было показано, как получить картинку с камеры, определить лицо на фотографии и обнаружить движение. Настало время приступить к следующему примеру: запись видео. Для работы будет использована OpenCV 3.1.0

package info.privateblog;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.VideoWriter;
import org.opencv.videoio.Videoio;

public class Test4 {
    public static void main (String args[]) throws InterruptedException{
    	System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    	VideoCapture camera = new VideoCapture(0);
    	
    	VideoWriter writer = new VideoWriter("c:/new/test.avi", VideoWriter.fourcc('X', 'V', 'I', 'D'), 15, new Size(1280, 720), true);
    	
    	camera.set(Videoio.CV_CAP_PROP_FRAME_WIDTH, 1280);
    	camera.set(Videoio.CV_CAP_PROP_FRAME_HEIGHT, 720);
    	
    	if(!camera.isOpened()){
    		System.out.println("Error");
    	}
    	else {
    		int index = 0;
    		Mat frame = new Mat();
    		   
    	    while(true){
    	    	if (camera.read(frame)){
    	    		System.out.println("Captured Frame Width " + frame.width() + " Height " + frame.height());
    	    	    writer.write(frame);
    	    	    Thread.currentThread().sleep(66);
    	    	    index++;
    	    	}

    	    	if (index > 200) {
    	    		break;
    	    	}
    	    	
    	    	frame.release();
    	    }	
    	}
    	writer.release();
    	camera.release();
    }
}   

Возможные значения для VideoWriter.fourcc:
VideoWriter.fourcc(‘X’,’V’,’I’,’D’) = кодек XviD
VideoWriter.fourcc(‘P’,’I’,’M’,’1′) = MPEG-1
VideoWriter.fourcc(‘M’,’J’,’P’,’G’) = motion-jpeg
VideoWriter.fourcc(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2
VideoWriter.fourcc(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3
VideoWriter.fourcc(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4
VideoWriter.fourcc(‘U’, ‘2’, ‘6’, ‘3’) = H263
VideoWriter.fourcc(‘I’, ‘2’, ‘6’, ‘3’) = H263I
VideoWriter.fourcc(‘F’, ‘L’, ‘V’, ‘1’) = FLV1

  1. Ильяс
    17 Март 2016 в 12:08 | #1

    Здравствуйте, а как можно сделать при записи видео и звук чтобы записывал?




    0



    0
    • Admin
      17 Март 2016 в 12:11 | #2

      Я пока до этого не дошёл. Наверное, придётся использовать другую библиотеку. OpenCV работает только с изображениями.




      0



      0
  2. Николай
    24 Июль 2016 в 16:13 | #3

    Здравствуйте. Попробовал запустить данный код, вроде бы все идет нормально, но на выходе AVI вайл оказывается пустым и весит 0 байт. Подскажите, в чем могут быть причины?




    0



    0
    • Admin
      24 Июль 2016 в 23:15 | #4

      Может, у вас проблема с кодеком. Попробуйте другой вместо XVID.




      0



      0
  3. 30 Июль 2016 в 13:39 | #5

    Проблему решил заменой кодека. Теперь у меня появился вопрос, можно ли с помощью Opencv реализовать перемотку видео вперед и назад. если нет, то что можно использовать для этого? Заранее спасибо за ответы




    0



    0
  4. Рустем
    24 Декабрь 2016 в 23:02 | #6

    Парни вопрос актуальный, кто как добавляет в видео данные о времени и кто как организует поиск?




    0



    0
  5. Admin
    25 Декабрь 2016 в 12:37 | #7

    Время добавить просто
    SimpleDateFormat dayFormat = new SimpleDateFormat(«yyyy-MM-dd»);
    String date = sdf.format(new Date());

    Imgproc.putText(frame, date, new Point(950, 940), Core.FONT_HERSHEY_TRIPLEX, 0.8, new Scalar(0, 255, 255));




    0



    0
  6. souJ
    29 Март 2017 в 19:19 | #8

    Hi, how we can record the video only for specific period (one minute for example) ? Thanks for your help :)




    0



    0
  7. souJ
    31 Март 2017 в 20:05 | #10

    Thanks :) I have a problem I want to use an IP camera (Motion JPEG over HTTP) instead of the webcam, the recording is done but the video can’t be opened in windows media player
    It is because the codec ,I tried MJPG but same problem :( Any suggestion Please ? :)




    0



    0
  8. Misha
    5 Апрель 2017 в 07:47 | #11

    проблема с добавлением звука еще не решена?




    0



    0
    • Admin
      5 Апрель 2017 в 12:05 | #12

      Она и не решалась. Его можно записать отдельно. Java это позволяет.




      0



      0
  1. Пока что нет уведомлений.