cv.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 <iostream>
- #include <fstream>
- #include <iterator>
- #include <vector>
- using namespace std;
- /*----------------------------
- * 功能 : 将 cv::Mat 数据写入到 .txt 文件
- *----------------------------
- * 函数 : WriteData
- * 访问 : public
- * 返回 : -1:打开文件失败;0:写入数据成功;1:矩阵为空
- *
- * 参数 : fileName [in] 文件名
- * 参数 : matData [in] 矩阵数据
- */
- int WriteData(string fileName, cv::Mat& matData)
- {
- int retVal = ;
- // 检查矩阵是否为空
- if (matData.empty())
- {
- cout << "矩阵为空" << endl;
- retVal = ;
- return (retVal);
- }
- // 打开文件
- ofstream outFile(fileName.c_str(), ios_base::out); //按新建或覆盖方式写入
- if (!outFile.is_open())
- {
- cout << "打开文件失败" << endl;
- retVal = -;
- return (retVal);
- }
- // 写入数据
- for (int r = ; r < matData.rows; r++)
- {
- for (int c = ; c < matData.cols; c++)
- {
- int data = matData.at<uchar>(r,c); //读取数据,at<type> - type 是矩阵元素的具体数据格式
- outFile << data << "\t" ; //每列数据用 tab 隔开
- }
- outFile << endl; //换行
- }
- return (retVal);
- }
- /*----------------------------
- * 功能 : 从 .txt 文件中读入数据,保存到 cv::Mat 矩阵
- * - 默认按 float 格式读入数据,
- * - 如果没有指定矩阵的行、列和通道数,则输出的矩阵是单通道、N 行 1 列的
- *----------------------------
- * 函数 : LoadData
- * 访问 : public
- * 返回 : -1:打开文件失败;0:按设定的矩阵参数读取数据成功;1:按默认的矩阵参数读取数据
- *
- * 参数 : fileName [in] 文件名
- * 参数 : matData [out] 矩阵数据
- * 参数 : matRows [in] 矩阵行数,默认为 0
- * 参数 : matCols [in] 矩阵列数,默认为 0
- * 参数 : matChns [in] 矩阵通道数,默认为 0
- */
- int LoadData(string fileName, cv::Mat& matData, int matRows = , int matCols = , int matChns = )
- {
- int retVal = ;
- // 打开文件
- ifstream inFile(fileName.c_str(), ios_base::in);
- if(!inFile.is_open())
- {
- cout << "读取文件失败" << endl;
- retVal = -;
- return (retVal);
- }
- // 载入数据
- istream_iterator<float> begin(inFile); //按 float 格式取文件数据流的起始指针
- istream_iterator<float> end; //取文件流的终止位置
- vector<float> inData(begin,end); //将文件数据保存至 std::vector 中
- cv::Mat tmpMat = cv::Mat(inData); //将数据由 std::vector 转换为 cv::Mat
- // 输出到命令行窗口
- //copy(vec.begin(),vec.end(),ostream_iterator<double>(cout,"\t"));
- // 检查设定的矩阵尺寸和通道数
- size_t dataLength = inData.size();
- //1.通道数
- if (matChns == )
- {
- matChns = ;
- }
- //2.行列数
- if (matRows != && matCols == )
- {
- matCols = dataLength / matChns / matRows;
- }
- else if (matCols != && matRows == )
- {
- matRows = dataLength / matChns / matCols;
- }
- else if (matCols == && matRows == )
- {
- matRows = dataLength / matChns;
- matCols = ;
- }
- //3.数据总长度
- if (dataLength != (matRows * matCols * matChns))
- {
- cout << "读入的数据长度 不满足 设定的矩阵尺寸与通道数要求,将按默认方式输出矩阵!" << endl;
- retVal = ;
- matChns = ;
- matRows = dataLength;
- }
- // 将文件数据保存至输出矩阵
- matData = tmpMat.reshape(matChns, matRows).clone();
- return (retVal);
- }
cv.Mat 与 .txt 文件数据的读写操作的更多相关文章
- python3 读取txt文件数据,绘制趋势图,matplotlib模块
python3 读取txt文件数据,绘制趋势图 test1.txt内容如下: 时间/min cpu使用率/% 内存使用率/% 01/12-17:06 0.01 7.61 01/12-17:07 0.0 ...
- C#操作txt文件并清空添加操作
C#操作txt文件,进行清空添加操作的例子.代码: //把txt清空 FileStream stream = File.Open(Adr,FileMode.OpenOrCreate,FileAcces ...
- 将txt文件数据存入excel表格
前言 最近使用Appium自动化在测试设备配网的情况,需要记录每次成功与否和耗时时间. 由于App不是很稳定,执行一段时间会奔溃,因此数据只能通过追加的形式写入到txt文件. 实现过程 存储在txt文 ...
- 3.C++逐行读取txt文件数据,利用getline -windows编程
引言:今天学会了getline的用法,顺手编写一个逐行读取txt文件的程序.关于getline的用法可以看我之前的博客:2.C++标准库函数:getline函数 定界流输入截取函数 -zobol的 ...
- excel、csv、txt文件数据读取
/// <summary> /// 读取Excel表每一行第一列的字符串集合 /// </summary> /// <param name="filePath& ...
- 20201126-1 txt文件筛选与读写【】
Exercise 1import os # 设置文件夹路径为'工作文件夹',获取文件夹下的所有文件和文件夹名称 path = './工作文件夹/' files_list = os.listdir(pa ...
- Yii读取TXT文件数据插入到数据库
个人平时会用到的方法,记录一下并分享给需要的朋友,Yii批量添加还需要clone一下model才可以,不然只会插入一条数据. 也可以把文件通过参数的方式调入到方法中. // 读取CVS文件 funct ...
- 将txt文件数据转成bin文件.
之前用牛逼的绘图以及分析bmp的像素文件的方法, 整理出汉字编码从: 0x4E00到0x9FA5, (维基上说是9FD5, 完了, 回头再更新吧.) https://en.wikipedia.org/ ...
- python txt文件数据转excel
txt content: perf.txt 2018-11-12 16:48:58 time: 16:48:58 load average: 0.62, 0.54, 0.56 mosquitto CP ...
随机推荐
- 通过ajax提交到url路由
$regBoxform.find('button').on('click', function(){ /*通过ajax提交请求*/ $.ajax({ type:'post', /*用post 方式提交 ...
- Android通过soap2访问webservice遇到HTTP request failed, HTTP status: 302的问题
笔者用C#在服务器端写了一个Webservice,然后再Android客户端通过soap2调用webservice的函数,遇到了HTTP request failed, HTTP status: 30 ...
- Angular Material 教程之布局篇
Angular Material 教程之布局篇 (一) : 布局简介https://segmentfault.com/a/1190000007215707 Angular Material 教程之布局 ...
- Shell 命令挂后台执行
使用nohup命令,结合& #!/bin/bash #挂后台执行文件 kimbo_test.sh nohup >& & 说明:0 是标准输入(STDIN),1 是标准输出 ...
- 创建一个最简单的SpringBoot应用
已经来实习了一段时间了,从开始接触到SpringBoot框架到现在一直都感觉SpringBoot框架实在是为我们带来了巨大遍历之处,之前一直在用并没有总结一下,现在有空从零开始写点东西,也算是对基础的 ...
- Highcharts 气泡图
Highcharts 气泡图 配置 chart 配置 配置 chart 的 type 为 'bubble' .chart.type 描述了图表类型.默认值为 "line". cha ...
- Unity 3D 无法显示中文的解决方法
大家开始用unity3D时想必都会遇到一个问题,使用中文时会乱码.这是由于编码方式不同导致的,具体解决方法如下: 程序写代码什么的最好下个像Notepad++类似的工具,这里使用Notepad++修改 ...
- volatile关键字解析(一)
引起线程并发问题,可以简单的总结为以下三条: 原子性问题 可见性问题 有序性问题(重排序问题) 原子性问题 什么是原子性? 原子性,即一个操作或者多个操作,要么全部执行并且执行过程中不会被任何因素打断 ...
- 安装mysql 5.7版本遇到问题及解决办法
遇见问题:1.执行MySql启动命令:net start mysql 报错:Mysql 服务正在启动Mysql 服务无法启动 服务没有报告任何错误. 解决办法:在mysql的安装目录下在my-defa ...
- 报错:java.lang.IllegalArgumentException: object is not an instance of declaring class
反射的报错信息如下: java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.r ...