У меня есть программа, в которой я вычисляю среднее значение нескольких кадров, когда я сохраняю это среднее значение, которое является кадром, я получил файл 965 КБ, но я делаю то же самое со SCILAB, который на основе OpenCV, я получаю 5,93 МБ, который звучит более логично. в любом случае я решил написать свой фрейм, используя fwrite и вот что сделал:
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 pf, но когда я открываю файл red.txt, я получаю:
€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€.......
Любая идея, что мне здесь не хватает, после этого я хочу загрузить эти файлы в SCILAB, а затем сохранить кадр как файл.
Спасибо за вашу помощь!
Вы пишете двоичные данные — как поплавок хранится в памяти.
Когда вы просматриваете файл (в редакторе или в командной строке), он думает, что это текстовые данные, и пытается интерпретировать его как символы.
Если вам нужно прочитать эти значения в другую программу, вы можете использовать fwrite и fread (хотя у вас могут быть проблемы с порядком байтов, если у вас разные процессоры)
Если вы просто хотите увидеть результаты или хотите немного больше работы, чтобы прочитать их в другой программе, вы можете просто напечатать значения с
printf("%f", resultframe.at<cv::Vec3f>(row,col )[0]);
Других решений пока нет …