0
我有一个程序,其中我计算了多个帧的平均值,当我保存这个平均值时,我得到了一个965KB的文件,但我做了同样的事情基于OpenCV的SCILAB我得到5.93MB,这听起来更合理。反正我decid使用fwrite来写我的框架,并在这里干了什么:获取cv的值:: Mat
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,但是当我的OpenCV文件red.txt我得到:
€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€<€€.......
任何想知道我在这里失去了什么,之后我想在SCILAB中加载这些文件,并将该帧保存为文件。 感谢您的帮助!
你正在编写32位IEEE 754个二进制浮点值到一个文件中(每个浮动4个字节),而不是文本表示打印值号码。我不知道文件格式,但它可能使用文本数字,因此您希望在文件上使用'ostream'并将数据流式传输到该文件中(或手动将它们转换为字符串并将它们写入文件中)。如果是这种情况,您还应该编写分隔符(取决于文件格式规范)。 – leemes 2013-02-18 15:05:06
@leemes谢谢你的回答,它确实与ostream一起工作,但我仍然不明白问题 – Engine 2013-02-18 15:26:54
你期望'fwrite'做什么?你给它一个数据指针和一个大小,类型信息就会丢失。一个合适的选择(如果你坚持使用'C'文件IO)将是'fprintf','fwrite'的C++等价物是'ostream :: write'。 – filmor 2013-02-18 15:32:48