0

0

OpenCV cv.Mat与.txt文件数据的读写操作

不言

不言

发布时间:2018-05-03 13:51:02

|

3669人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了opencv 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  
#include  
#include  
#include  
 
using namespace std; 
 
/*---------------------------- 
 * 功能 : 将 cv::Mat 数据写入到 .txt 文件 
 *---------------------------- 
 * 函数 : WriteData 
 * 访问 : public 
 * 返回 : -1:打开文件失败;0:写入数据成功;1:矩阵为空 
 * 
 * 参数 : fileName  [in]  文件名 
 * 参数 : matData [in]  矩阵数据 
 */ 
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); 
  } 
 
  // 写入数据 
  for (int r = 0; r < matData.rows; r++) 
  { 
    for (int c = 0; c < matData.cols; c++) 
    { 
      uchar data = matData.at(r,c); //读取数据,at - 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 = 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); 
  } 
 
  // 载入数据 
  istream_iterator begin(inFile);  //按 float 格式取文件数据流的起始指针 
  istream_iterator end;     //取文件流的终止位置 
  vector inData(begin,end);   //将文件数据保存至 std::vector 中 
  cv::Mat tmpMat = cv::Mat(inData);    //将数据由 std::vector 转换为 cv::Mat 
 
  // 输出到命令行窗口 
  //copy(vec.begin(),vec.end(),ostream_iterator(cout,"\t"));  
 
  // 检查设定的矩阵尺寸和通道数 
  size_t dataLength = inData.size(); 
  //1.通道数 
  if (matChns == 0) 
  { 
    matChns = 1; 
  } 
  //2.行列数 
  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.数据总长度 
  if (dataLength != (matRows * matCols * matChns)) 
  { 
    cout << "读入的数据长度 不满足 设定的矩阵尺寸与通道数要求,将按默认方式输出矩阵!" << endl; 
    retVal = 1; 
    matChns = 1; 
    matRows = dataLength; 
  }  
 
  // 将文件数据保存至输出矩阵 
  matData = tmpMat.reshape(matChns, matRows).clone(); 
   
  return (retVal); 
}

相关推荐:

Android开发教程与笔记pdf版
Android开发教程与笔记pdf版

Android文件存取与数据库编程知识,文件操作主要是读文件、写文件、读取静态文件等,同时还介绍了创建添加文件内容并保存,打开文件并显示内容;数据库编程方面主要介绍了SQLite数据库的使用、包括创建、删除、打开数据库、非查询SQL操作指令、查询SQL指令-游标Cursors等知识。

下载

python3.4.3下逐行读入txt文本并去重的方法

相关专题

更多
C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

6

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

27

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

12

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

5

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

8

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

5

2026.01.15

php图片上传教程汇总
php图片上传教程汇总

本专题整合了php图片上传相关教程,阅读专题下面的文章了解更多详细教程。

2

2026.01.15

phpstorm相关教程大全
phpstorm相关教程大全

本专题整合了phpstorm相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号