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。

  1. #include <iostream>
  2. #include <fstream>
  3. #include <iterator>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. /*----------------------------
  9. * 功能 : 将 cv::Mat 数据写入到 .txt 文件
  10. *----------------------------
  11. * 函数 : WriteData
  12. * 访问 : public
  13. * 返回 : -1:打开文件失败;0:写入数据成功;1:矩阵为空
  14. *
  15. * 参数 : fileName [in] 文件名
  16. * 参数 : matData [in] 矩阵数据
  17. */
  18. int WriteData(string fileName, cv::Mat& matData)
  19. {
  20. int retVal = ;
  21.  
  22. // 检查矩阵是否为空
  23. if (matData.empty())
  24. {
  25. cout << "矩阵为空" << endl;
  26. retVal = ;
  27. return (retVal);
  28. }
  29.  
  30. // 打开文件
  31. ofstream outFile(fileName.c_str(), ios_base::out); //按新建或覆盖方式写入
  32. if (!outFile.is_open())
  33. {
  34. cout << "打开文件失败" << endl;
  35. retVal = -;
  36. return (retVal);
  37. }
  38.  
  39. // 写入数据
  40. for (int r = ; r < matData.rows; r++)
  41. {
  42. for (int c = ; c < matData.cols; c++)
  43. {
  44. int data = matData.at<uchar>(r,c); //读取数据,at<type> - type 是矩阵元素的具体数据格式
  45. outFile << data << "\t" ; //每列数据用 tab 隔开
  46. }
  47. outFile << endl; //换行
  48. }
  49.  
  50. return (retVal);
  51. }
  52.  
  53. /*----------------------------
  54. * 功能 : 从 .txt 文件中读入数据,保存到 cv::Mat 矩阵
  55. * - 默认按 float 格式读入数据,
  56. * - 如果没有指定矩阵的行、列和通道数,则输出的矩阵是单通道、N 行 1 列的
  57. *----------------------------
  58. * 函数 : LoadData
  59. * 访问 : public
  60. * 返回 : -1:打开文件失败;0:按设定的矩阵参数读取数据成功;1:按默认的矩阵参数读取数据
  61. *
  62. * 参数 : fileName [in] 文件名
  63. * 参数 : matData [out] 矩阵数据
  64. * 参数 : matRows [in] 矩阵行数,默认为 0
  65. * 参数 : matCols [in] 矩阵列数,默认为 0
  66. * 参数 : matChns [in] 矩阵通道数,默认为 0
  67. */
  68. int LoadData(string fileName, cv::Mat& matData, int matRows = , int matCols = , int matChns = )
  69. {
  70. int retVal = ;
  71.  
  72. // 打开文件
  73. ifstream inFile(fileName.c_str(), ios_base::in);
  74. if(!inFile.is_open())
  75. {
  76. cout << "读取文件失败" << endl;
  77. retVal = -;
  78. return (retVal);
  79. }
  80.  
  81. // 载入数据
  82. istream_iterator<float> begin(inFile); //按 float 格式取文件数据流的起始指针
  83. istream_iterator<float> end; //取文件流的终止位置
  84. vector<float> inData(begin,end); //将文件数据保存至 std::vector 中
  85. cv::Mat tmpMat = cv::Mat(inData); //将数据由 std::vector 转换为 cv::Mat
  86.  
  87. // 输出到命令行窗口
  88. //copy(vec.begin(),vec.end(),ostream_iterator<double>(cout,"\t"));
  89.  
  90. // 检查设定的矩阵尺寸和通道数
  91. size_t dataLength = inData.size();
  92. //1.通道数
  93. if (matChns == )
  94. {
  95. matChns = ;
  96. }
  97. //2.行列数
  98. if (matRows != && matCols == )
  99. {
  100. matCols = dataLength / matChns / matRows;
  101. }
  102. else if (matCols != && matRows == )
  103. {
  104. matRows = dataLength / matChns / matCols;
  105. }
  106. else if (matCols == && matRows == )
  107. {
  108. matRows = dataLength / matChns;
  109. matCols = ;
  110. }
  111. //3.数据总长度
  112. if (dataLength != (matRows * matCols * matChns))
  113. {
  114. cout << "读入的数据长度 不满足 设定的矩阵尺寸与通道数要求,将按默认方式输出矩阵!" << endl;
  115. retVal = ;
  116. matChns = ;
  117. matRows = dataLength;
  118. }
  119.  
  120. // 将文件数据保存至输出矩阵
  121. matData = tmpMat.reshape(matChns, matRows).clone();
  122.  
  123. return (retVal);
  124. }

cv.Mat 与 .txt 文件数据的读写操作的更多相关文章

  1. python3 读取txt文件数据,绘制趋势图,matplotlib模块

    python3 读取txt文件数据,绘制趋势图 test1.txt内容如下: 时间/min cpu使用率/% 内存使用率/% 01/12-17:06 0.01 7.61 01/12-17:07 0.0 ...

  2. C#操作txt文件并清空添加操作

    C#操作txt文件,进行清空添加操作的例子.代码: //把txt清空 FileStream stream = File.Open(Adr,FileMode.OpenOrCreate,FileAcces ...

  3. 将txt文件数据存入excel表格

    前言 最近使用Appium自动化在测试设备配网的情况,需要记录每次成功与否和耗时时间. 由于App不是很稳定,执行一段时间会奔溃,因此数据只能通过追加的形式写入到txt文件. 实现过程 存储在txt文 ...

  4. 3.C++逐行读取txt文件数据,利用getline -windows编程

      引言:今天学会了getline的用法,顺手编写一个逐行读取txt文件的程序.关于getline的用法可以看我之前的博客:2.C++标准库函数:getline函数 定界流输入截取函数 -zobol的 ...

  5. excel、csv、txt文件数据读取

    /// <summary> /// 读取Excel表每一行第一列的字符串集合 /// </summary> /// <param name="filePath& ...

  6. 20201126-1 txt文件筛选与读写【】

    Exercise 1import os # 设置文件夹路径为'工作文件夹',获取文件夹下的所有文件和文件夹名称 path = './工作文件夹/' files_list = os.listdir(pa ...

  7. Yii读取TXT文件数据插入到数据库

    个人平时会用到的方法,记录一下并分享给需要的朋友,Yii批量添加还需要clone一下model才可以,不然只会插入一条数据. 也可以把文件通过参数的方式调入到方法中. // 读取CVS文件 funct ...

  8. 将txt文件数据转成bin文件.

    之前用牛逼的绘图以及分析bmp的像素文件的方法, 整理出汉字编码从: 0x4E00到0x9FA5, (维基上说是9FD5, 完了, 回头再更新吧.) https://en.wikipedia.org/ ...

  9. 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 ...

随机推荐

  1. 通过ajax提交到url路由

    $regBoxform.find('button').on('click', function(){ /*通过ajax提交请求*/ $.ajax({ type:'post', /*用post 方式提交 ...

  2. Android通过soap2访问webservice遇到HTTP request failed, HTTP status: 302的问题

    笔者用C#在服务器端写了一个Webservice,然后再Android客户端通过soap2调用webservice的函数,遇到了HTTP request failed, HTTP status: 30 ...

  3. Angular Material 教程之布局篇

    Angular Material 教程之布局篇 (一) : 布局简介https://segmentfault.com/a/1190000007215707 Angular Material 教程之布局 ...

  4. Shell 命令挂后台执行

    使用nohup命令,结合& #!/bin/bash #挂后台执行文件 kimbo_test.sh nohup >& & 说明:0 是标准输入(STDIN),1 是标准输出 ...

  5. 创建一个最简单的SpringBoot应用

    已经来实习了一段时间了,从开始接触到SpringBoot框架到现在一直都感觉SpringBoot框架实在是为我们带来了巨大遍历之处,之前一直在用并没有总结一下,现在有空从零开始写点东西,也算是对基础的 ...

  6. Highcharts 气泡图

    Highcharts 气泡图 配置 chart 配置 配置 chart 的 type 为 'bubble' .chart.type 描述了图表类型.默认值为 "line". cha ...

  7. Unity 3D 无法显示中文的解决方法

    大家开始用unity3D时想必都会遇到一个问题,使用中文时会乱码.这是由于编码方式不同导致的,具体解决方法如下: 程序写代码什么的最好下个像Notepad++类似的工具,这里使用Notepad++修改 ...

  8. volatile关键字解析(一)

    引起线程并发问题,可以简单的总结为以下三条: 原子性问题 可见性问题 有序性问题(重排序问题) 原子性问题 什么是原子性? 原子性,即一个操作或者多个操作,要么全部执行并且执行过程中不会被任何因素打断 ...

  9. 安装mysql 5.7版本遇到问题及解决办法

    遇见问题:1.执行MySql启动命令:net start mysql 报错:Mysql 服务正在启动Mysql 服务无法启动 服务没有报告任何错误. 解决办法:在mysql的安装目录下在my-defa ...

  10. 报错: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 ...