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