Как записать видео с помощью 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

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

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

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

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

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

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

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

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

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

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