真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

OpenCVcv.Mat與.txt文件數(shù)據(jù)的讀寫操作

本篇文章主要介紹了OpenCV cv.Mat 與 .txt 文件數(shù)據(jù)的讀寫操作,小編覺得挺不錯的,現(xiàn)在分享給大家。

成都創(chuàng)新互聯(lián)公司專注于成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

1、按OpenCV格式實(shí)現(xiàn)的 .txt 文件讀寫

可以用 cvSave 和 cvLoad 實(shí)現(xiàn),格式和 .xml/.yml 的差不多,不過如果專用與 OpenCV 的數(shù)據(jù)讀寫,還是用  .xml/.yml 文件格式較好,我比較喜歡 .yml 格式,可讀性非常棒。

用 cvSave 和 cvLoad 讀寫 .txt 文件,其實(shí)現(xiàn)方式和數(shù)據(jù)格式與 .yml 文件基本一致。

例如:cvSave("camera_matrix.txt",camera_matrix);  //保存了 camera_matrix 的數(shù)組頭以及和它所指的data(類似yml形式的文件)

2、導(dǎo)入/導(dǎo)出其它程序的 .txt 文件數(shù)據(jù)

可以用常規(guī)的 sprintf_s 和 fprintf_s 來實(shí)現(xiàn),不過效率比較低,這里介紹一種快捷易用的方法,利用了 std 的 steam 和 vector。

#include  
#include  
#include  
#include  
 
using namespace std; 
 
/*---------------------------- 
 * 功能 : 將 cv::Mat 數(shù)據(jù)寫入到 .txt 文件 
 *---------------------------- 
 * 函數(shù) : WriteData 
 * 訪問 : public 
 * 返回 : -1:打開文件失??;0:寫入數(shù)據(jù)成功;1:矩陣為空 
 * 
 * 參數(shù) : fileName [in] 文件名 
 * 參數(shù) : matData [in] 矩陣數(shù)據(jù) 
 */ 
int WriteData(string fileName, cv::Mat& matData) 
{ 
 int retVal = 0; 
 
 // 打開文件 
 ofstream outFile(fileName.c_str(), ios_base::out); //按新建或覆蓋方式寫入 
 if (!outFile.is_open()) 
 { 
 cout << "打開文件失敗" << endl; 
 retVal = -1; 
 return (retVal); 
 } 
 
 // 檢查矩陣是否為空 
 if (matData.empty()) 
 { 
 cout << "矩陣為空" << endl; 
 retVal = 1; 
 return (retVal); 
 } 
 
 // 寫入數(shù)據(jù) 
 for (int r = 0; r < matData.rows; r++) 
 { 
 for (int c = 0; c < matData.cols; c++) 
 { 
 uchar data = matData.at(r,c); //讀取數(shù)據(jù),at - type 是矩陣元素的具體數(shù)據(jù)格式 
 outFile << data << "\t" ; //每列數(shù)據(jù)用 tab 隔開 
 } 
 outFile << endl; //換行 
 } 
 
 return (retVal); 
} 
 
 /*---------------------------- 
 * 功能 : 從 .txt 文件中讀入數(shù)據(jù),保存到 cv::Mat 矩陣 
 * - 默認(rèn)按 float 格式讀入數(shù)據(jù), 
 * - 如果沒有指定矩陣的行、列和通道數(shù),則輸出的矩陣是單通道、N 行 1 列的 
 *---------------------------- 
 * 函數(shù) : LoadData 
 * 訪問 : public 
 * 返回 : -1:打開文件失?。?:按設(shè)定的矩陣參數(shù)讀取數(shù)據(jù)成功;1:按默認(rèn)的矩陣參數(shù)讀取數(shù)據(jù) 
 * 
 * 參數(shù) : fileName [in] 文件名 
 * 參數(shù) : matData [out] 矩陣數(shù)據(jù) 
 * 參數(shù) : matRows [in] 矩陣行數(shù),默認(rèn)為 0 
 * 參數(shù) : matCols [in] 矩陣列數(shù),默認(rèn)為 0 
 * 參數(shù) : matChns [in] 矩陣通道數(shù),默認(rèn)為 0 
 */ 
int LoadData(string fileName, cv::Mat& matData, int matRows = 0, int matCols = 0, int matChns = 0) 
{ 
 int retVal = 0; 
 
 // 打開文件 
 ifstream inFile(fileName.c_str(), ios_base::in); 
 if(!inFile.is_open()) 
 { 
 cout << "讀取文件失敗" << endl; 
 retVal = -1; 
 return (retVal); 
 } 
 
 // 載入數(shù)據(jù) 
 istream_iterator begin(inFile); //按 float 格式取文件數(shù)據(jù)流的起始指針 
 istream_iterator end; //取文件流的終止位置 
 vector inData(begin,end); //將文件數(shù)據(jù)保存至 std::vector 中 
 cv::Mat tmpMat = cv::Mat(inData); //將數(shù)據(jù)由 std::vector 轉(zhuǎn)換為 cv::Mat 
 
 // 輸出到命令行窗口 
 //copy(vec.begin(),vec.end(),ostream_iterator(cout,"\t")); 
 
 // 檢查設(shè)定的矩陣尺寸和通道數(shù) 
 size_t dataLength = inData.size(); 
 //1.通道數(shù) 
 if (matChns == 0) 
 { 
 matChns = 1; 
 } 
 //2.行列數(shù) 
 if (matRows != 0 && matCols == 0) 
 { 
 matCols = dataLength / matChns / matRows; 
 } 
 else if (matCols != 0 && matRows == 0) 
 { 
 matRows = dataLength / matChns / matCols; 
 } 
 else if (matCols == 0 && matRows == 0) 
 { 
 matRows = dataLength / matChns; 
 matCols = 1; 
 } 
 //3.數(shù)據(jù)總長度 
 if (dataLength != (matRows * matCols * matChns)) 
 { 
 cout << "讀入的數(shù)據(jù)長度 不滿足 設(shè)定的矩陣尺寸與通道數(shù)要求,將按默認(rèn)方式輸出矩陣!" << endl; 
 retVal = 1; 
 matChns = 1; 
 matRows = dataLength; 
 } 
 
 // 將文件數(shù)據(jù)保存至輸出矩陣 
 matData = tmpMat.reshape(matChns, matRows).clone(); 
 
 return (retVal); 
} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


分享名稱:OpenCVcv.Mat與.txt文件數(shù)據(jù)的讀寫操作
URL地址:http://weahome.cn/article/jhejjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部