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).
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
versuchen unsigned char anstelle von einem char? –
Ich habe es versucht, aber es macht keinen Unterschied – JLucas