如何将C、C++程序中的图像矩阵数据导出到Excel
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、注意上面代码中的加粗行:一个是加载图像的函数;一个是导出图像数据的函数此外最重要的一句是:outf足毂忍珩ile << p.val[0] << "\t";其中的“\t"一定要添加,它是制表符,这样能够使图像数据对应到Excel中的每一行每一列注:其他程序的输出代码类似,一定要在输出的代码语句中添加格式控制"\t",方可完美导出到Excel
5、如果ofstream outfile("../OpenCVTest/output/gray.xls");这句中的xls改成txt,则输出的数据格式比较乱,不易观察行列数
6、导出到Excel后,可以方面查看第几行第几列的数据,比如查看第10行第6列
7、一般Excel的列数以字母符号显示的,通过设置便可达到上面效果。由于已经写过了这个问题经验,可以直接关注我的百度经验,便可以找到了具体的设置。