C++实现保存数据至EXCEL

 更新时间:2022年11月11日 10:28:19   作者:翟天保Steven  
这篇文章主要介绍了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所示,成功!

如果函数有什么可以改进完善的地方,非常欢迎大家指出~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++迷宫问题的求解算法

    C++迷宫问题的求解算法

    这篇文章主要为大家详细介绍了C++迷宫问题的求解算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C++基于easyx图形库实现推箱子游戏

    C++基于easyx图形库实现推箱子游戏

    这篇文章主要为大家详细介绍了C++基于easyx图形库实现推箱子游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 有关C++头文件的包含顺序研究

    有关C++头文件的包含顺序研究

    下面小编就为大家带来一篇有关C++头文件的包含顺序研究。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • c++函数指针和回调函数示例

    c++函数指针和回调函数示例

    这篇文章主要介绍了c++函数指针和回调函数示例,需要的朋友可以参考下
    2014-05-05
  • C++中volatile关键字的使用详解以及常见的误解

    C++中volatile关键字的使用详解以及常见的误解

    volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统,硬件或者其他线程等
    2020-01-01
  • 基于C语言中野指针的深入解析

    基于C语言中野指针的深入解析

    “野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用
    2013-07-07
  • C++20中std::format的示例代码

    C++20中std::format的示例代码

    本文详细介绍了C++20中std::format的功能、使用方法和高级应用,包括基本用法、数字和文本的格式化、日期和时间的处理、自定义类型的格式化等,感兴趣的可以了解一下
    2024-10-10
  • C++ txt 文件读取,并写入结构体中的操作

    C++ txt 文件读取,并写入结构体中的操作

    这篇文章主要介绍了C++ txt 文件读取,并写入结构体中的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C++运算符重载的方法详细解析

    C++运算符重载的方法详细解析

    运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的
    2013-10-10
  • C++实现日期类(Date)

    C++实现日期类(Date)

    这篇文章主要为大家详细介绍了C++实现日期类的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09

最新评论