作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

场景需求

在用C++编程时,有保存数据的需求就有加载数据的需求,加载EXCEL数据的方式各式各样,本文主要针对上篇文章讲的“保存图像数据至EXCEL”,提供了一种对应的加载EXCEL图像数据的函数。大家可以根据自身需求进行修改。

功能函数代码

cv::Mat ReadPicFromExcel(string name)
{// result是所要提取的图像cv::Mat result,pic;// 所要提取文件的名字ifstream infile(name);string str;int col = 0;// 一行行读取while (getline(infile, str)){string temp;stringstream input(str);col = 0;// 单个数据提取while (input >> temp){// 如果是字符“nan”,则输入nan("");否则输入数据if (temp == "nan"){pic.push_back(float(nan("")));}else {pic.push_back(float(atof(temp.c_str())));}col++;}}// reshape变换成正常row*col的矩阵int row = pic.rows / col;result = pic.reshape(0, row);// 关闭infile.close();// 返回图像矩阵return result;
}

C++测试代码

#include<iostream>
#include<fstream>
#include<opencv2/opencv.hpp>
using namespace std;void WritePicToExcel(string name, cv::Mat pic);
cv::Mat ReadPicFromExcel(string name);
int main()
{cv::Mat pic = cv::Mat::zeros(1000, 1000, CV_32FC1);for (int i = 0; i < pic.rows; i++){for (int j = 0; j < pic.cols; j++){pic.at<float>(i, j) = rand() % 255;}}pic.at<float>(1, 2) = nan("");WritePicToExcel("test1.xls", pic);cv::Mat result = ReadPicFromExcel("test1.xls");return 0;
}void WritePicToExcel(string name, cv::Mat pic)
{CV_Assert(pic.type() == CV_32FC1);ofstream outfile(name);int row = pic.rows;int col = pic.cols;for (int i = 0; i < row; i++){float *p = pic.ptr<float>(i);for (int j = 0; j < col; j++){if (p[j] == p[j]){outfile << p[j] << (j == (col - 1) ? '\n' : '\t');}else {outfile << "nan" << (j == (col - 1) ? '\n' : '\t');}}}outfile.close();
}cv::Mat ReadPicFromExcel(string name)
{// result是所要提取的图像cv::Mat result,pic;// 所要提取文件的名字ifstream infile(name);string str;int col = 0;// 一行行读取while (getline(infile, str)){string temp;stringstream input(str);col = 0;// 单个数据提取while (input >> temp){// 如果是字符“nan”,则输入nan("");否则输入数据if (temp == "nan"){pic.push_back(float(nan("")));}else {pic.push_back(float(atof(temp.c_str())));}col++;}}// reshape变换成正常row*col的矩阵int row = pic.rows / col;result = pic.reshape(0, row);// 关闭infile.close();// 返回图像矩阵return result;
}

测试效果

图1 随机生成的图像矩阵

图2 保存效果图

图3 读取效果

如上图所示,为了方便,我随机生成了一个1000*1000的图像矩阵,并定义了第二行第三列的点为nan值,保存效果如图2所示,成功;再用加载数据的函数,得到的result同之前的pic一致。

如果函数有什么可以改进完善的地方,非常欢迎大家指出,一同进步何乐而不为呢~

如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

C++-加载EXCEL数据相关推荐

  1. MFC 加载 EXCEL 并快速读取大量数据

    MFC 加载 EXCEL库 可以查看 http://t.csdn.cn/U8TJU 这里主要记录一下读取EXCEL数据的方式: 方式一:遍历所有单元格,不适用于大数据量 CApplication ap ...

  2. Java使用poi加载Excel模板,将查询出来的数据封装到Excel中并进行指定某些列的合并操作

    Java使用poi加载Excel模板,将查询出来的数据封装到Excel中并进行指定某些列的合并操作 最近一周项目中需要读取数据库中的记录将记录封装到给定的模板中,指定业务列需要进行合并:下面将它进行整 ...

  3. autoware加载地图数据与使用rosbag包建图(三)

    autoware加载地图数据(三) 介绍如何为autoware加载地图数据 启动autoware $ cd ~/autoware.ai $ source install/setup.bash $ ro ...

  4. Naigos PNP图无法加载最新数据

    Naigos PNP图无法加载最新数据 前几天IDC断电,设备全部重启,导致nagios pnp图无法正常加载,经过排查发下如下几点状况: 1,查看log日志,并没有报错. 2,npcd没有正常运行, ...

  5. ExtJs TreePanel 不能加载ashx数据的解决办法

    今天学习Extjs TreePanel 时在加载动态数据时经常加载不进来,因为我是使用MVC2获取动态数据的,单独调试MVC的返回数据时OK的,网上有很多解决方案,其中最简单的是: loader: n ...

  6. 首次使用Cesium加载3D数据不成功

    接此: https://blog.csdn.net/bcbobo21cn/article/details/110454547 参阅相关教程:Cesium加载3D数据是通过3D Tiles进行: 3D ...

  7. (仿头条APP项目)6.点击过的新闻列表文字变灰和下拉刷新与滚动加载新闻数据

    文章目录 一.点击过的新闻列表文字变灰 效果图 实现思路 导入ormlite数据库类依赖 利用ormlite创建数据库和表 创建数据库类MyDbHelper 创建数据库中的新闻实体类NewInfo 页 ...

  8. Android之ListViewJson加载网络数据

    使用到的主要内容: 1.Json 解析网络数据 2.异步任务加载图片和数据 3.ListView 的内存空间优化(ConvertView)和运行时间优化(ViewHolder) 4.ListView ...

  9. Geospark-SQL加载SHP数据

    title: (六)Geospark SQL加载SHP数据(JAVA版) date: 2021-05-08 09:29:06 tags: GeoSpark GeoSpark SQL默认是无法读取Shp ...

最新文章

  1. 陆奇新动向:将担任拼多多独立董事
  2. mysql 当前用户连接数_实战:判断mysql中当前用户的连接数-分组淘选
  3. SAP ABAP Development Tool 提高开发效率的十个小技巧
  4. 网络编程和反射的基本知识点的总结
  5. 华为、苹果、谷歌高调宣布要造车!瞄准19万亿美元的智能汽车市场!
  6. 计算机工程与应用 格式,计算机工程与应用模板.doc
  7. PHP Warning: date(): It is not safe to rely on the system’s timezone settings
  8. python 解析pb文件_利用Python解析json文件
  9. 表锁 行锁 页锁 是什么区别
  10. 干货分享 ▎软考论文怎么写?
  11. Android性能分析工具Systrace和TraceView的使用
  12. 《最重要的事,只有一件》读书笔记
  13. 多级下料问题的建模 翻译
  14. 超详细的bat脚本常用命令及亲测示例
  15. python表格中插入图片_运维(1)python操作excel插入图片
  16. bootstraptable合并标题_bootstrapTable 合并单元格
  17. 《大型网站技术架构:核心原理与案例分析》之读书笔记
  18. Jmeter 参数化中文乱码问题
  19. 面对荣辱平心静气 - 摘录1
  20. Java实现 蓝桥杯VIP 算法提高 3-2字符串输入输出函数

热门文章

  1. iOS:延时执行的三种方式
  2. GoLang strings包函数用法
  3. MongoDB学习笔记(四)--索引 性能优化
  4. 《FilthyRichClients》读书笔记(一)-SwingのEDT
  5. 大话IT职场之搞技术是青春饭吗?
  6. 1248. 统计「优美子数组」
  7. 9-3 数据分布概论
  8. 我用Python把抖音上的美女图片转字符画,期望的AI目标更进一步【机器学习算法实战小项目,k聚类算法图片转化字符画】
  9. 阿里 前端 规范_不懂源码的前端不是真正的前端
  10. nodejs linux复制文本,Nodejs 复制文件/文件夹的方法