2016-05-06 10 views
0

Ich versuche, eine verarbeitete Matte zu STDOUT zu schreiben, damit ich kann es in ffmpeg Rohr, aber ich kann nicht verstehen, was der Unterschied genau zwischenSchreiben opencv Matte nach stdout

imencode und imread ist. sowie

Nach der opencv Dokumentation

imencode : Encodes an image into a memory buffer. 

imread : Loads an image from a file. 

Ist das nicht imread Laden von Bilddaten in einen Speicherpuffer? Kann ein opencv-Fenster an eine andere Anwendung weitergeleitet werden?

Anstelle von Raspvid möchte ich ffmpeg meine Programmausgabe, die das Fenster sein würde, das das verarbeitete Fenster anzeigt.

http://www.valmueller.net/stream-video-with-raspberry-pi-to-youtube/

+0

primäre Unterschied zwischen '' und imread' imencode' ist, dass der erste für die Eingabe (kodiertes Bild ist, in diesem Fall in eine Datei, in eine cv :: Mat lesen) und die zweite für die Ausgabe (cv :: Mat geschrieben als ein codiertes Bild in einen Speicherpuffer). Was genau meinen Sie mit "Fenster zu einer anderen Anwendung"? –

+0

http://www.valmueller.net/stream-video-with-raspberry-pi-to-youtube/ Ich möchte das opencv-Fenster, das die verarbeitete Ausgabe hat, in ffmpeg streamen und dann das zu youtube streamen. Derzeit zeigt mein opencv-Programm das verarbeitete Fenster mit imshow ("cctv", img); wenn ich ./main bin ich schon zu STDOUT piping? – Zypps987

+0

@ Zypps987, hast du es geschafft, in ffmpeg zu pipen? Ich möchte das Gleiche tun. –

Antwort

0

imread auf imdecode bezogen, während imwrite zu imencode verwandt ist.

können Sie denken an imread wie:

  1. lesen wie besehen die Rohdaten Puffer aus einer Bilddatei (jpg, png, etc ...)
  2. Verwendung imdecode die roh zu dekodieren Datenpuffer zu (normalerweise, aber abhängig von Flags) ein BGR-Bild.

während imwrite ist:

  1. Verwendung imencode in jpg zu dekodieren, png, etc ... a (in der Regel) BGR Bild zu einem Rohdatenpuffer.
  2. Schreiben Sie den Rohdatenpuffer wie er ist auf die Festplatte.

Der Rohdatenpuffer ist ein vector<uchar>.

Je nach Bedarf können Sie auf stdout setzen:

  • den (in der Regel) BGR-Puffer, der die eine Folge von Bytes BGRBGR enthält ... BGR. Das Byte-Array beginnt bei mat.data und hat die Länge: mat.rows * mat.cols * mat.channels(). Dies gilt für kontinuierliche Matrizen, aber nehmen wir an, dass dies für den Moment der Fall ist.
  • oder der dekodierten jpg, PNG, etc ... Rohdatenpuffer
+0

Hmm ... danke für diese Erklärung. Ich erwähne in einem Beitrag über die Details, was genau ich versuche zu tun. Ich bin mir nicht sicher, was genau ich brauche: / – Zypps987