如何将C,C++程序中的图像矩阵数据导出到Excel

 我来答
一点设计演示
高粉答主

2016-01-13 · 职场/教育各类模板,衷于原创
一点设计演示
采纳数:874 获赞数:83609

向TA提问 私信TA
展开全部

1.Matlab软件可以自动保存中间变量的值并可以可视化方式显示

2.下面详细介绍在VS中如何将图像的数据导出出Excel中

3.如果VS已经配置好了OpenCV库,那么可以将下面程序直接得到到你新建的工程文件中运行

 

#include <iostream>

#include <fstream>

#include <cv.h>  

#include <highgui.h>  

#include <math.h>  

using namespace std;

using namespace cv;

IplImage* Igray = 0;

IplImage* It = 0;

IplImage* Iat;

void main()

{

Igray = cvLoadImage("hand.jpg", CV_LOAD_IMAGE_GRAYSCALE);//加载图像的函数

It = cvCreateImage(cvSize(Igray->width, Igray->height), IPL_DEPTH_8U, 1);

Iat = cvCreateImage(cvSize(Igray->width, Igray->height), IPL_DEPTH_8U, 1);

 

cvThreshold(Igray, It, 150, 255, CV_THRESH_BINARY);//单一阈值

cvAdaptiveThreshold(Igray, Iat, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);//自适应阈值

 

CvScalar p; //保存通道的像素

ofstream outfile("../OpenCVTest/output/gray.xls");

for (int i = 0; i<Iat->height; i++)

{

 

for (int j = 0; j<Iat->width; j++)

{

//if (i==0)

//   outfile << "第" << j << "列\t";

//if (0==j)

// outfile << "第" << i << "行\t";

p = cvGet2D(Iat, i, j);

outfile << p.val[0] << "\t";

}

outfile << endl;

} //*/  

 

cvNamedWindow("orignal", 1);

cvNamedWindow("threshold", 1);

cvNamedWindow("adaptiveThresh", 1);

cvShowImage("orignal", Igray);

cvShowImage("threshold", It);

cvShowImage("adaptiveThresh", Iat);

 

cvWaitKey(0);

 

cvReleaseImage(&Igray);

cvReleaseImage(&It);

cvReleaseImage(&Iat);

 

cvDestroyWindow("orignal");

cvDestroyWindow("threshold");

cvDestroyWindow("adaptiveThresh");

 

}

4.注意上面代码中的加粗行:一个是加载图像的函数;一个是导出图像数据的函数

此外最重要的一句是:outfile << p.val[0] << "\t";

其中的“\t"一定要添加,它是制表符,这样能够使图像数据对应到Excel中的每一行每一列

注:其他程序的输出代码类似,一定要在输出的代码语句中添加格式控制"\t",方可完美导出到Excel

5.如果ofstream outfile("../OpenCVTest/output/gray.xls");这句中的xls改成txt,则输出的数据格式比较乱,不易观察行列数

6.导出到Excel后,可以方面查看第几行第几列的数据,比如查看第10行第6列

克祥昭我铭3
2015-02-05 · TA获得超过4017个赞
知道大有可为答主
回答量:2198
采纳率:100%
帮助的人:3306万
展开全部
1、Matlab软件可以自动保存中间变量的值并可以可视化方式显示
2、下面详细介绍在VS中如何将图像的数据导出出Excel中
3、
如果您的VS已经配置好了OpenCV库,那么可以将下面程序直接得到到你新建的工程文件中运行

#include <iostream>
#include <fstream>
#include <cv.h>
#include <highgui.h>
#include <math.h>
using namespace std;
using namespace cv;
IplImage* Igray = 0;
IplImage* It = 0;
IplImage* Iat;
void main()
{
Igray = cvLoadImage("hand.jpg", CV_LOAD_IMAGE_GRAYSCALE);//加载图像的函数
It = cvCreateImage(cvSize(Igray->width, Igray->height), IPL_DEPTH_8U, 1);
Iat = cvCreateImage(cvSize(Igray->width, Igray->height), IPL_DEPTH_8U, 1);

cvThreshold(Igray, It, 150, 255, CV_THRESH_BINARY);//单一阈值
cvAdaptiveThreshold(Igray, Iat, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);//自适应阈值

CvScalar p; //保存通道的像素
ofstream outfile("../OpenCVTest/output/gray.xls");
for (int i = 0; i<Iat->height; i++)
{

for (int j = 0; j<Iat->width; j++)
{
//if (i==0)
// outfile << "第" << j << "列\t";
//if (0==j)
// outfile << "第" << i << "行\t";
p = cvGet2D(Iat, i, j);
outfile << p.val[0] << "\t";
}
outfile << endl;
} //*/

cvNamedWindow("orignal", 1);
cvNamedWindow("threshold", 1);
cvNamedWindow("adaptiveThresh", 1);
cvShowImage("orignal", Igray);
cvShowImage("threshold", It);
cvShowImage("adaptiveThresh", Iat);

cvWaitKey(0);

cvReleaseImage(&Igray);
cvReleaseImage(&It);
cvReleaseImage(&Iat);

cvDestroyWindow("orignal");
cvDestroyWindow("threshold");
cvDestroyWindow("adaptiveThresh");

}
4、注意上面代码中的加粗行:一个是加载图像的函数;一个是导出图像数据的函数
此外最重要的一句是:outfile << p.val[0] << "\t";
其中的“\t"一定要添加,它是制表符,这样能够使图像数据对应到Excel中的每一行每一列

注:其他程序的输出代码类似,一定要在输出的代码语句中添加格式控制"\t",方可完美导出到Excel
5、如果ofstream outfile("../OpenCVTest/output/gray.xls");这句中的xls改成txt,则输出的数据格式比较乱,不易观察行列数
6、导出到Excel后,可以方面查看第几行第几列的数据,比如查看第10行第6列
7、一般Excel的列数以字母符号显示的,通过设置便可达到上面效果。由于已经写过了这个问题经验,可以直接关注我的百度经验,便可以找到了具体的设置。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式