Fehlende Video Codecs bei Opencv

Kristian

Mitglied
Hallo zusammen,

ich versuche mit Hilve von OpenCV 3.1 das Video einer Webcam ab zu speichern. Das Programm funktioniert auch. Das Problem ist jedoch der Videocodec. Nur wenn ich MJPG nutze wird tatsächlich das Video abgespeichert, bei allen anderen Codecs bleibt die Datei leer.
Wenn ich bei der Erzeugung des VideoWriters als fourcc - Code "-1" mitgebe öffnet sich zur Laufzeit ein Fenster aus dem ich den zu verwendenden Codec auswählen kann. Hier stehen mir aber nur fünf Formate zur Auswahl. Auch hier funktioniert nur die Auswahl Volle Einzelbilder. Leider haben jedoch viele Player Probleme damit diese Dateien zu öffnen.

upload_2016-5-12_15-36-22.png

Außerdem scheint es sich um ein unkomprimiertes Format zu handeln. Die Datei wird also ziemlich groß.

Hier ist mein Code:

Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

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

public class KriPanel extends JPanel implements Runnable {

    private int count = 0;
    private VideoCapture camSource = null;
    private Mat frame;
    private MatOfByte mem;
    private VideoWriter oVideoWriter;
    private int cameraID;
    private String cameraIP;
    private Boolean run = false;

    public KriPanel(int cameraID, String cameraIP) {
          System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // load native library of opencv
        this.setSize(105, 160);
        this.setVisible(true);
        initComponents();
        this.cameraID = cameraID;
        this.cameraIP = cameraIP;
        this.cameraID = 1;
        frame = new Mat();
        mem = new MatOfByte();
    }

    @Override
    public void run() {
        System.out.println("Run");
        synchronized (this) {
            while (true) {
                if (camSource.grab()) {
                    try {
                        camSource.retrieve(frame);
                        Imgcodecs.imencode(".bmp", frame, mem);
                        Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
                        BufferedImage buff = (BufferedImage) im;
                        // Image jPanel1;
                        Graphics g = this.getGraphics();
                        System.out.println("Graphics: " +g);
                        oVideoWriter.write(frame);
                        if (g.drawImage(buff, 0, 0, 160, 110, 0, 0, 640, 480, null))
                            ;
                        /*
                         * if (g.drawImage(buff, 0, 0, getWidth(), getHeight() -
                         * 150, 0, 0, buff.getWidth(), buff.getHeight(), null))
                         */
                    } catch (Exception ex) {
                        System.out.println("Error");
                    }
                }
            }
        }
    }

    private void initComponents() {
        if (cameraID != 42) {
            camSource = new VideoCapture(cameraID);
        } else {
            camSource = new VideoCapture(cameraIP);
        }
        if (!camSource.isOpened()) {
            System.out.println("Camera Error");
        } else {
            System.out.println("Camera OK");
        }

        Size frameSize = new Size((int) camSource.get(Videoio.CAP_PROP_FRAME_WIDTH),
                (int) camSource.get(Videoio.CAP_PROP_FRAME_HEIGHT));
        String filename = "./Test.avi";
        FourCC fourCC = new FourCC("MJPG");
        System.out.println(frameSize);
        //oVideoWriter = new VideoWriter(filename, fourCC.toInt(), 20, frameSize, true);
        oVideoWriter = new VideoWriter(filename, -1, 20, frameSize, true);
    }

}

Ich benutze Windows 7 und Eclipse.

Hat jemand eine Idee wie ich an weitere Codecs kommen kann?
 

Anhänge

  • upload_2016-5-12_15-36-13.png
    upload_2016-5-12_15-36-13.png
    21,7 KB · Aufrufe: 13
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Fehlende Spielfigur auf neuer Landschaft Spiele- und Multimedia-Programmierung 2
A java3d, fehlende texturen unter windows (graka onboard) Spiele- und Multimedia-Programmierung 4
F JPG / PNG in Video umwandeln Spiele- und Multimedia-Programmierung 3
J Gesucht: Video-Analyse-Bibliothek Spiele- und Multimedia-Programmierung 3
K Video: Per Image Information Spiele- und Multimedia-Programmierung 3
K Video aus JavaFX Images generieren Spiele- und Multimedia-Programmierung 2
Blender3D VLCJ Video lässt sich nicht mehr abspielen nach mysql Installation Spiele- und Multimedia-Programmierung 1
Finalspace Entwicklung eines Jump & Run Spiels Video-Tutorial Spiele- und Multimedia-Programmierung 12
S Video mit Hintergrundmusik versehen Spiele- und Multimedia-Programmierung 2
M Bilderwechsel in Video an Sound anpassen Spiele- und Multimedia-Programmierung 2
P APIs zur Video-Einbindung Spiele- und Multimedia-Programmierung 3
G Video-/Livestream einbinden Spiele- und Multimedia-Programmierung 5
Z Video Gui Konzeptfrage (Mit After Effects und Photoshop) Spiele- und Multimedia-Programmierung 3
T Interaktives Video - Empfehlung? Spiele- und Multimedia-Programmierung 6
E GUI+Video einbinden Spiele- und Multimedia-Programmierung 2
B Video von einer IP kamera Spiele- und Multimedia-Programmierung 5
P Video in JAVA abspielen,... Spiele- und Multimedia-Programmierung 3
M technologie für video, webcam & co Spiele- und Multimedia-Programmierung 25
R Video auseinandernehmen und zusammenfügen Spiele- und Multimedia-Programmierung 7
K Video-Streaming / Android Spiele- und Multimedia-Programmierung 3
H JMF Problem bei Video Receive über RTP Spiele- und Multimedia-Programmierung 2
H JMF - Video Abspielen Spiele- und Multimedia-Programmierung 12
S Video erstellen (AVI) Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen


Oben