У меня есть программа, в которой я вычисляю среднее значение кратных кадров, когда я сохраняю это среднее значение, которое является кадром. Я получил файл 965 КБ, но я делаю то же самое с SCILAB, основанный на OpenCV, я получаю 5.93 МБ, который звучит более логично. в любом случае я decid писать свой кадр, используя FWRITE и вот что сделал:Получение значений cv :: Mat
cv::Mat meanFrame= cv::Mat::zeros(height,width,CV_32FC3);
cv::Mat frameR;
FILE* inpR = NULL;
...... //after calculating the meanFrame
inpR = fopen("d:\\red.txt","wb+");
for(int row = 0; row < meanFrame.rows; ++row) {
for (int col = 0; col < meanFrame.cols; ++col) {
std::cout << meanFrame.at<cv::Vec3f>(row, col)[1] <<std::endl;
std::cout << meanFrame.at<cv::Vec3f>(row, col)[2] <<std::endl;
fwrite(&resultframe.at<cv::Vec3f>(row,col)[0],sizeof(float),1,inpR);
}
}
fcloseall();
Я могу видеть пф канал 1 и 2, но когда я OpenCV файл red.txt я получаю:
€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€.......
любой что я здесь отсутствует, после этого я хочу загрузить этот файл в SCILAB и сохранить файл как файл. Спасибо за помощь!
вы пишете 32bit IEEE 754 двоичных значений с плавающей точкой в файл (4 байта на поплавок), а не текстовое представление цифры. Я не знаю формат файла, но он может использовать текстовые номера, поэтому вы хотите использовать 'ostream' в файле и передавать в него числа (или конвертировать их в строки вручную и записывать их в файл). Если это так, вы должны также написать разделители (зависит от спецификации файла formt). – leemes
@leemes спасибо за ваш ответ, он действительно работал с ostream, но я до сих пор не понимаю проблему – Engine
Что вы ожидаете от 'fwrite'? Вы даете ему указатель данных и размер, информация о типе теряется в пути. Подходящей альтернативой (если вы настаиваете на использовании 'C' файла IO) будет' fprintf', эквивалент C++ 'fwrite' -' ostream :: write'. – filmor