获取cv::Mat的值

getting the values of cv::Mat

本文关键字:的值 Mat 获取 cv      更新时间:2023-10-16

我有一个程序,我在其中计算多个帧的平均值,当我保存这个平均值时,它是一个帧,我得到了965KB的文件,但我对SCILAB做了同样的事情,它基于OpenCV,我得到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中加载这些文件,然后将帧保存为文件。谢谢你的帮助!

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

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

如果你需要将这些值读取到另一个程序中,那么你可以使用fwrite和fread(尽管如果你有不同的CPU,你可能会遇到字节排序问题)

如果你只是想看到结果,或者想把它们读到另一个程序中做更多的工作,你可以用打印值

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