OpenCV cv.Mat与.txt文件数据的读写操作
本篇文章主要介绍了OpenCVcv.Mat与.txt文件数据的读写操作,小编觉得挺不错的,现在分享给大家。
1、按OpenCV格式实现的.txt文件读写
可以用cvSave和cvLoad实现,格式和.xml/.yml的差不多,不过如果专用与OpenCV的数据读写,还是用 .xml/.yml文件格式较好,我比较喜欢.yml格式,可读性非常棒。
用cvSave和cvLoad读写.txt文件,其实现方式和数据格式与.yml文件基本一致。
例如:cvSave("camera_matrix.txt",camera_matrix); //保存了camera_matrix的数组头以及和它所指的data(类似yml形式的文件)
2、导入/导出其它程序的.txt文件数据
可以用常规的sprintf_s和fprintf_s来实现,不过效率比较低,这里介绍一种快捷易用的方法,利用了std的steam和vector。
#include#include #include #include usingnamespacestd; /*---------------------------- *功能:将cv::Mat数据写入到.txt文件 *---------------------------- *函数:WriteData *访问:public *返回:-1:打开文件失败;0:写入数据成功;1:矩阵为空 * *参数:fileName[in]文件名 *参数:matData[in]矩阵数据 */ intWriteData(stringfileName,cv::Mat&matData) { intretVal=0; //打开文件 ofstreamoutFile(fileName.c_str(),ios_base::out);//按新建或覆盖方式写入 if(!outFile.is_open()) { cout<<"打开文件失败"< (r,c);//读取数据,at -type是矩阵元素的具体数据格式 outFile<begin(inFile);//按float格式取文件数据流的起始指针 istream_iterator end;//取文件流的终止位置 vector inData(begin,end);//将文件数据保存至std::vector中 cv::MattmpMat=cv::Mat(inData);//将数据由std::vector转换为cv::Mat //输出到命令行窗口 //copy(vec.begin(),vec.end(),ostream_iterator (cout,"\t")); //检查设定的矩阵尺寸和通道数 size_tdataLength=inData.size(); //1.通道数 if(matChns==0) { matChns=1; } //2.行列数 if(matRows!=0&&matCols==0) { matCols=dataLength/matChns/matRows; } elseif(matCols!=0&&matRows==0) { matRows=dataLength/matChns/matCols; } elseif(matCols==0&&matRows==0) { matRows=dataLength/matChns; matCols=1; } //3.数据总长度 if(dataLength!=(matRows*matCols*matChns)) { cout<<"读入的数据长度不满足设定的矩阵尺寸与通道数要求,将按默认方式输出矩阵!"< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。