Я пытаюсь прочитать необработанные данные изображения BGR24 из ffmpeg в приложение C ++. Приложение C ++ затем обработает изображение, используя openCV.
jpg -> ffmpeg -> приложение -> openCV
Я начал с сохранения вывода из ffmpeg в файл и чтения этого файла из приложения. OpenCV, по-видимому, принимает это, поскольку он счастливо отображает изображение.
Тем не менее, он терпит неудачу при передаче вывода из ffmpeg непосредственно в стандартный поток приложения.
Я изменил программу, чтобы просто сохранить ввод в файл, и я сравнил два файла. Первые 1856 байтов одинаковы, но после этого файл, сохраненный из stdin, отличается, и после этого весь файл является просто шестнадцатеричным D1 (или десятичным 209).
чтение байтов из стандартного ввода
Я предполагаю, что я делаю ошибку при чтении стандартного ввода вместо ffmpeg с другим выводом. Но мне очень странно, что первая часть такая же.
Это код, который я использую для чтения стандартного ввода
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;
}
вот как я пытаюсь прочитать файл
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();
Любая помощь будет оценена
Кажется, проблема была в чтении стандартного ввода. Я работаю на машине с Windows и не установил входной поток в двоичном режиме.
Установка входного потока в бинарный режим.
_setmode(_fileno(stdin), _O_BINARY);
и читать поток, как это
cin.get(in);
исправил проблему.
Других решений пока нет …