我正在尝试将原始BGR24图像数据从ffmpeg读入C ++应用程序。然后,C ++应用程序将使用openCV进一步处理图像。 jpg - > ffmpeg - >申请 - > OpenCV的
我首先将ffmpeg的输出存储到文件中,然后从应用程序中读取该文件。 OpenCV显然接受了这一点,因为它可以愉快地显示图像。 但是,当将ffmpeg的输出直接传递到应用程序的stdin时,它会失败。
我将程序更改为仅将输入保存到文件中,然后我比较了这两个文件。前1856个字节是相同的,但之后从stdin保存的文件不同,之后整个文件只是十六进制D1(或十进制209)。
我认为我在读取stdin而不是输出不同的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();
任何帮助将不胜感激
答案 0 :(得分:0)
似乎问题在于读取标准输入。我正在使用Windows机器,并没有将输入流设置为二进制模式。
将输入流设置为二进制模式。
_setmode(_fileno(stdin), _O_BINARY);
并像这样阅读流
cin.get(in);
解决了这个问题。