我编程了,其中我计算了多帧的平均值,当我保存这个平均值时,我得到了一个965KB文件的框架,但我对基于OpenCV的SCILAB做了同样的事情我得到了一个5.93MB听起来更合乎逻辑。无论如何我决定使用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();
我可以看到pf频道1和2但是当我打开文件red.txt时,我得到:
€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€.......
知道我在这里缺少什么,之后我想在SCILAB中加载这些文件而不是将帧保存为文件。 谢谢你的帮助!
答案 0 :(得分:2)
您正在编写二进制数据 - 浮点数如何存储在内存中。
当你查看文件时(在编辑器或命令行上),它认为这是文本数据,并试图将其解释为字符。
如果您需要将此值读入另一个程序,那么您可以使用fwrite和fread(尽管如果您有不同的CPU,可能会出现字节排序问题)
如果您只是想查看结果,或者想要稍微更多的工作将它们读入另一个程序,您只需打印值
printf("%f", resultframe.at<cv::Vec3f>(row,col )[0]);