获取cv :: Mat的值

时间:2013-02-18 15:02:34

标签: c++ c opencv scilab

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

1 个答案:

答案 0 :(得分:2)

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

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

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

如果您只是想查看结果,或者想要稍微更多的工作将它们读入另一个程序,您只需打印值

printf("%f", resultframe.at<cv::Vec3f>(row,col )[0]);