0

我有一个程序,我在其中计算多个帧的平均值,当我保存这个平均值时,我得到一个 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 中加载这些文件,而不是将框架保存为文件。感谢您的帮助!

4

1 回答 1

2

您正在编写二进制数据 - 浮点数如何存储在内存中。

当您查看文件(在编辑器中或命令行上)时,它认为这是文本数据并试图将其解释为字符。

如果您需要将此值读入另一个程序,那么您可以使用 fwrite 和 fread(尽管如果您有不同的 CPU,您可能会遇到字节顺序问题)

如果您只是想查看结果,或者想要稍微多做一些工作以将它们读入另一个程序,您可以打印这些值

printf("%f", resultframe.at<cv::Vec3f>(row,col )[0]);
于 2013-02-18T17:20:47.913 回答