C++-保存数据至EXCEL

简介: C++-保存数据至EXCEL

场景需求

      在用C++编程时,往往会有保存数据的需求,比如我做图像处理的工作,经常会想将图片的像素数据保存至Excel中,然后用matlab进行分析或者用于其他方面。


      为了解决该需求,本文将为大家提供一个保存数据至EXCEL的函数。我以保存一幅图像数据为例,大家可以根据自己需求进行微调。

功能函数代码

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++)
  {
        // 采用指针读取Mat矩阵的方式提速
    float *p = pic.ptr<float>(i);
    for (int j = 0; j < col; j++)
    {
            // 若需要保存的数据是非nan值,则正常保存;若为nan值,则保存字符“nan”
      if (p[j] == p[j])
      {
        outfile << p[j] << (j == (col - 1) ? '\n' : '\t');
      }
      else {
        outfile << "nan" << (j == (col - 1) ? '\n' : '\t');
      }
    }
  }
  outfile.close();
}

C++测试代码

#include<iostream>
#include<fstream>
#include<opencv2/opencv.hpp>
using namespace std;
void WritePicToExcel(string name, cv::Mat pic);
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;
    }
  }
    // 人为设置一个nan值检验是否可以有效保存
  pic.at<float>(1, 2) = nan("");
    // 输入的string为保存的文件名,函数其实还可以加点文件格式的判断,有兴趣的自己改进下吧
  WritePicToExcel("test1.xls", pic);
  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();
}

测试效果

图1 随机生成的图像矩阵

图2 保存效果图

      如上图所示,为了方便,我随机生成了一个1000*1000的图像矩阵,并定义了第二行第三列的点为nan值,保存效果如图2所示,成功!


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


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

相关文章
|
1月前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
31 0
|
19天前
|
数据采集 存储 数据挖掘
使用Python读取Excel数据
本文介绍了如何使用Python的`pandas`库读取和操作Excel文件。首先,需要安装`pandas`和`openpyxl`库。接着,通过`read_excel`函数读取Excel数据,并展示了读取特定工作表、查看数据以及计算平均值等操作。此外,还介绍了选择特定列、筛选数据和数据清洗等常用操作。`pandas`是一个强大且易用的工具,适用于日常数据处理工作。
|
1月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
1月前
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
|
1月前
|
存储 Java Apache
|
1月前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
34 2
|
1月前
|
编译器 C++
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
virtual类的使用方法问题之C++类中的非静态数据成员是进行内存对齐的如何解决
|
1月前
|
数据可视化 Python
我是如何把python获取到的数据写入Excel的?
我是如何把python获取到的数据写入Excel的?
37 2
|
1月前
|
存储 数据挖掘 C语言
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
|
1月前
|
存储 安全 数据处理
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】
【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】