目标

最近正在做热图像的实验数据处理,热像仪上位机导出热图像视频数据是,每一帧为一个csv文件,每行像素值由逗号分隔,行与行之间是换行符,数据格式是纯文本,科学计数法。需要将全部数据存至一个mat中,以便后续使用opencv库处理。

思路

  1. 将读取CSV文件的函数和当前正在读取的文件操作符等放在一个类中,构造类似句柄的一个类,代表一个帧的文件。
  2. 类中包含如打开、关闭、检查列数、(没有写检查行数的函数)、科学计数法转浮点数等基本操作。
  3. Mat类引用传参。
  4. 以固定格式打开CSV文件,比如打开一段视频的第一帧就传入参数1。
    代码

程序

读取CSV的类

//read_csv.h
#ifndef READ_CSV_H
#define READ_CSV_H
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>//istringstream 必须包含这个头文件
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
class CSV {public:CSV(int b, int r);//b为列数~CSV();void check_columns(void);//判断该数据有多少列void read_csv(int n,Mat& dest);//读取哪一帧数据void file_close(void);//--关闭所有打开的文件void open_csv(int idx);//打开第idx帧的文件/*void creat_new_csv(void);//--创建一个新的csv文件void write_csv(void);//--将需要的数据写入新csv文件中*/
public:int columns;
private:string  filename_base = "H:/data/2__";//--打开的文件名string oneline;//--保存一行数据ifstream infile;//--输入文件流ofstream outfile;//--输出文件流int blank_rows = 0, rows, current_frame = 0;//无效行数,列数,当前帧
};
double sci2db(string& strSci);
#endif // !READ_CSV_H

filename_base 是基础文件名,在上位机导出时设置,后面跟着上位机自动补全的第几帧。
blank_rows是无效的行数,上位机会生成几行记录相关信息。

#include "read_csv.h"
/*
每一帧是一个文件
*/CSV::CSV(int b,int r=240)//构造函数
{ this->blank_rows = b; //设定空白行数check_columns();//检查列数this->rows = r;
}
CSV::~CSV() //析构函数
{   if(this->infile.is_open())this->infile.close();//有文件打开则关闭文件
}
void CSV::check_columns(void)
{open_csv(1);//打开第一帧,编号从一开始string tmp;for (int i = 0; i < blank_rows; i++){getline(this->infile, tmp);//--读取一行}getline(this->infile, tmp);//--读取一行this->columns = 1;for (int i = 0; i < tmp.size(); i++) {if (tmp[i] == ',')this->columns++;}cout <<"There exists "<<this->columns <<" columns in the file "<< endl;file_close();//关闭文件
}void CSV::read_csv(int n,Mat& dest)
{dest.create(this->rows, this->columns, CV_64FC1);open_csv(n);for (int i = 0; i < this->rows; i++) {getline(this->infile, this->oneline);//--读取一行istringstream tempstream(this->oneline);//将整行字符串line读入到字符串流istringstream中string field;int m = 0;for (int j = 0; j < this->columns; j++) {getline(tempstream, field, ',');/* 注意 Mat::at 函数是个模板函数, 需要指明参数类型, 因为这张图是具有红蓝绿三通道的图,所以它的参数类型可以传递一个 Vec3b, 这是一个存放 3 个 uchar 数据的 Vec(向量). 这里提供了索引重载, [2]表示的是返回第三个通道, 在这里是 Red 通道, 第一个通道(Blue)用[0]返回 */dest.at<double>(i, j) = sci2db(field);}}file_close();//关闭文件
}
void CSV::open_csv(int idx)
{string filename = filename_base + to_string(idx) + ".csv";//--写入文件名this->infile.open(filename); //--打开文件
}
void CSV::file_close(void)
{this->infile.close();
}
double sci2db(string& strSci)
{int    iPower = 0;  //幂double dMntsa = 0;  //尾数double dCoefficient = 1;  //系数std::string strPower, strMntsa;if (std::string::npos == strSci.find("E")){return atof(strSci.c_str());}strMntsa = strSci.substr(0, strSci.find("E"));strPower = strSci.substr(strSci.find("E") + 1);dMntsa = atof(strMntsa.c_str());iPower = atoi(strPower.c_str());while (iPower != 0){if (iPower > 0){dCoefficient *= 10;iPower--;}else{dCoefficient *= 0.1;iPower++;}}return dMntsa * dCoefficient;
}
/*temp
void CSV::write_csv(void)
{this->outfile << this->fields[8] << "," << this->fields[10] << endl;
}
void CSV::creat_new_csv(void)
{this->outfile.open("out.csv", ios::out | ios::trunc);
}void CSV::open_csv(void)
{if(filename.size()!=0)this->infile.open(this->filename); //--打开文件
}
*/

主函数示例

简单写一个读取每一帧吧

#include <opencv2\opencv.hpp>
#include "read_csv.h"
using namespace cv;
using namespace std;
int start_frame = 1000, end_frame = 6000;//起始帧和终点帧
int main()
{CSV csv_1(0,240);Mat read_tmp;for (int i = start_frame; i < end_frame;i++) {csv_1.read_csv(i, read_tmp);//读取第i帧图像//···}//···//system("PAUSE ");return 0;
}

C++ 读取CSV文件中的数据到Mat相关推荐

  1. python获取股指_用Python读取csv文件中的沪深300指数历史交易数据

    保存路径:D:\python\用Python读取csv文件中的沪深300指数历史交易数据 程序名称:readcsvhs300.py: 数据名称:沪深300指数历史交易数据.csv: 开发环境:Win7 ...

  2. python怎么读取csv的一部分数据_python批量读取csv文件 如何用python将csv文件中的数据读取成数组...

    如何用python把多个csv文件数据处理后汇总到新csv文件你看这月光多温柔,小编转头还能看见你,一切从未坍塌. 可以用pandas读取数据,首先把文件方同一个文件价里,然后对当前文件价的所有内容循 ...

  3. 从csv文件中导入数据到MySQL数据库

    从csv文件中导入数据到MySQL数据库 转: 一.Workbench客户端导入(8.0.11基本导不全且速度奇慢) 1.点击如下图标创建数据库(非必要) 2.在表类上右键导入 二.SQL语句导入(可 ...

  4. python导入txt文件并绘图-Python实现读取txt文件中的数据并绘制出图形操作示例

    本文实例讲述了Python实现读取txt文件中的数据并绘制出图形操作.分享给大家供大家参考,具体如下: 下面的是某一文本文件中的数据. 6.1101,17.592 5.5277,9.1302 8.51 ...

  5. 用python读取txt文件中的数据并画各类图形展示_Python实现读取txt文件中的数据并绘制出图形操作示例...

    本文实例讲述了Python实现读取txt文件中的数据并绘制出图形操作.分享给大家供大家参考,具体如下: 下面的是某一文本文件中的数据. 6.1101,17.592 5.5277,9.1302 8.51 ...

  6. 将数据写入json文件,并且读取json文件中的数据

    目录 一.将数据生成json文件 二.读取json文件中的数据 三.方法测试 四.其他附件 1.User实体类 2.import 一.将数据生成json文件 方法 /*** 生成.json格式文件*/ ...

  7. Python读取excel文件中的数据,绘制折线图、散点图

    https://www.cnblogs.com/liulinghua90/p/9935642.html https://blog.csdn.net/qq_32458499/article/detail ...

  8. 将 .csv文件中的数据导入My SQL数据库中

    利用My SQL 将.csv文件中的数据导入数据库.首先以管理员身份运行cmd,输入指令net start mysql 运行mysql服务,然后输入指令mysql -u root -p ,输入密码.* ...

  9. 如何读取csv文件中第n行数据python-python数据处理之如何选取csv文件中某几行的数据...

    前言 有些人看到这个问题觉得不是问题,是嘛,不就是df.col[]函数嘛,其实忽略了一个重点,那就是我们要省去把csv文件全部读取这个过程,因为如果在面临亿万级别的大规模数据,得到的结果就是boom, ...

最新文章

  1. 遇见BUG(1):都是非时钟专用引脚惹的祸?
  2. is this mysql server_Mysql:is not allowed to connect to this MySQL server
  3. C语言中使用库函数解析命令行参数
  4. 白话 Session 与 Cookie:从经营杂货店开始
  5. php数组的元素个数,php怎么统计数组元素的个数
  6. 多选框位置调整_URPC 2019 水下目标检测竞赛冠军方案:多图像融合增强
  7. java 匿名访问权限_java-春季安全性allowAll()不允许匿名访问
  8. logo、展板、彩页、手提袋总结
  9. Dividing the numbers CodeForces - 899C (构造)
  10. React引入,运行
  11. 微信红包技术架构,防外挂贼牛逼!(附胶片下载)
  12. mpython掌控板_用mpython x玩转掌控板——微信小程序 遇上掌控板
  13. 让局域网内部挺高网速
  14. 云小课 | MRS和自建Hadoop相比,有哪些优势?
  15. axis2生成客户端代码_利用ApiPost一键、快速生成接口文档!女猿也过38节!
  16. 深入学习MongoDB
  17. CentOS 6.5 64位 安装zabbix-2.2.0
  18. Bypassing Stack Cookies, SafeSeh, SEHOP, HW DEP and ASLR
  19. JAVA 算法 回溯
  20. 大众点评社区运营攻略

热门文章

  1. Linux 邮件服务器 之跟我一步一步来实现一个邮件系统
  2. SQL Server 2012安装错误案例:Error while enabling Windows feature: NetFx3, Error Code: -2146498298...
  3. Shell in AIX Web端 自动远程执行重启tomcat服务命令
  4. mysql 数据库军规_用尽洪荒之力整理的Mysql数据库32条军规(转)
  5. [C++再学习系列] 具有链接的C++实体
  6. python中异或怎么算_python中的异或运算
  7. 手游接入Facebook的那些坑
  8. python爬虫项目描述怎么写_爬虫项目咋写,爬取什么样的数据可以作为项目写在简历上?...
  9. 【java学习之路】(java框架)008.JdbcTemplate
  10. 国内达梦数据库相关函数-时间日期