2016-08-03 18 views
-1

Ich versuche, rohe BGR24-Bilddaten von ffmpeg in eine C++ - Anwendung zu lesen. Die C++ - Anwendung wird das Bild dann weiter mit openCV verarbeiten. jpg -> ffmpeg -> application -> openCVProbleme beim Lesen der Ausgabe von ffmpeg

Ich begann mit dem Speichern der Ausgabe von ffmpeg in eine Datei und das Lesen dieser Datei aus der Anwendung heraus. OpenCV akzeptiert dies anscheinend, da es das Bild glücklich anzeigt. Es schlägt jedoch fehl, wenn die Ausgabe von ffmpeg direkt in die Standardeingabe der Anwendung geleitet wird.

Ich änderte das Programm, um nur die Eingabe in eine Datei zu speichern, und ich verglich die beiden Dateien. Die ersten 1856 Bytes sind gleich, aber danach ist die Datei, die von stdin gespeichert wurde, unterschiedlich und danach ist die gesamte Datei nur Hex D1 (oder Dezimal 209).

bytes read from stdin

bytes read from file

Ich nehme an, dass ich einen Fehler mache, während stdin anstelle von ffmpeg Lesen einen anderen Ausgang. Aber ich finde es sehr seltsam, dass der erste Teil derselbe ist. Dieser ist der Code, den ich stdin zu lesen, verwenden

char* img = (char*) malloc(FRM_SIZE_BYTES); 
cout << "array address: " << &img; 
cout << "array of size: " << FRM_SIZE_BYTES << endl; 

int read = int read = read_stdin(img, FRM_SIZE_BYTES); 
cout << "read " << read << " bytes" << endl; 

int read_stdin(char* buffer, int count) 
{ 
    int read = 0; 
    char in; 
    for (int i = 0; i < count; i++) { 
     cin >> in; 
     buffer[i] = in; 
     read++; 
    } 
    return read; 
} 

das ist, wie ich versuche, die Datei zu lesen

ifstream image; 
image.open("img.raw", ios_base::binary | ios_base::in); 
std::streampos start, end; 
char* imgFile = (char*)malloc(FRM_SIZE_BYTES); 
image.read(imgFile, FRM_SIZE_BYTES); 
image.close(); 

Jede mögliche Hilfe

+0

versuchen unsigned char anstelle von einem char? –

+0

Ich habe es versucht, aber es macht keinen Unterschied – JLucas

Antwort

0

geschätzt werden Es scheint, dass das Problem stdin vorlas . Ich arbeite an einem Windows-Rechner und habe den Inputstream nicht auf den Binärmodus gesetzt.

Einstellung des Eingangsstroms in den binären Modus.

_setmode(_fileno(stdin), _O_BINARY); 

und liest den Strom wie dieses

cin.get(in); 

das Problem behoben.

Verwandte Themen