首页 > 其他分享 >如何生成excel文件作为图像识别结果

如何生成excel文件作为图像识别结果

时间:2022-12-25 11:37:16浏览次数:53  
标签:return sSql Excel CString excel 生成 Path 图像识别 sExcelFile

如何生成excel文件作为图像识别结果



在进行大规模图像处理的时候,如果能够以表格的形式生成结果文件,将非常的直观。这个时候,选择excel作为结果输出文件,将是合适的。



查询相关资料,有很多关于excel的操作方法,但是使用mfc来进行excel的操作,总是要涉及到很多东西。



一、采用csv方式



实验如下:



创建1.csv文件,使用记事本进行编辑




如何生成excel文件作为图像识别结果_控件


而后使用excel进行打开



如何生成excel文件作为图像识别结果_文件名_02


效果很好。而csv的操作是可以直接采用文本编辑的方式生成的,可以直接采用std:file操作的方法来生成csv文件,然后使用excel打开就可以。


再附上一段代码,是opencv官方提供的csv操作相关的,可以参考


//创建或续写目录下的csv文件,填写“文件位置-分类”对



int writeCsv(const string& filename,const Vector<pair<string,string>>srcVect,char separator ){



ofstream file(filename.c_str(),ofstream::app);



if (!file)



return 0;



for (int i=0;i<srcVect.size();i++){



file<<srcVect[i].first<<separator<<srcVect[i].second<<endl;



}



return srcVect.size();



}



//读取目录下的csv文件,获得“文件位置-分类”对



vector<pair<string,string>> readCsv(const string& filename, char separator) {



pair<string,string> apair;



string line, path, classlabel;



vector<pair<string,string>> retVect;



ifstream file(filename.c_str(), ifstream::in);



if (!file)



return retVect;



while (getline(file, line)) {



stringstream liness(line);



getline(liness, path, separator);



getline(liness, classlabel);



if(!path.empty() && !classlabel.empty()) {



apair.first = path;



apair.second = classlabel;



retVect.push_back(apair);



}







}



return retVect;



}

 


二、采用xls方式


涉及到的东西比较多,现在已经集成到了GOcvHelper中去


#pragma region 



//



//名称:GetExcelDriver



//功能:获取ODBC中Excel驱动



//作者:徐景周([email protected])



//组织:未来工作室(Future Studio)



//日期:2002.9.1



/



CString GetExcelDriver()



{



char szBuf[2001];



WORD cbBufMax = 2000;



WORD cbBufOut;



char *pszBuf = szBuf;



CString sDriver;







// 获取已安装驱动的名称(涵数在odbcinst.h里)



if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))



return "";







// 检索已安装的驱动是否有Excel...



do



{



if (strstr(pszBuf, "Excel") != 0)



{



//发现 !



sDriver = CString(pszBuf);



break;



}



pszBuf = strchr(pszBuf, '\0') + 1;



}



while (pszBuf[1] != '\0');







return sDriver;



}







///



// BOOL MakeSurePathExists( CString &Path,bool FilenameIncluded)



// 参数:



// Path 路径



// FilenameIncluded 路径是否包含文件名



// 返回值:



// 文件是否存在



// 说明:



// 判断Path文件(FilenameIncluded=true)是否存在,存在返回TURE,不存在返回FALSE



// 自动创建目录



//



///



BOOL MakeSurePathExists( CString &Path,



bool FilenameIncluded)



{



int Pos=0;



while((Pos=Path.Find('\\',Pos+1))!=-1)



CreateDirectory(Path.Left(Pos),NULL);



if(!FilenameIncluded)



CreateDirectory(Path,NULL);



// return ((!FilenameIncluded)?!_access(Path,0):



// !_access(Path.Left(Path.ReverseFind('\\')),0));







return !_access(Path,0);



}







//获得默认的文件名



BOOL GetDefaultXlsFileName(CString& sExcelFile)



{



///默认文件名:yyyymmddhhmmss.xls



CString timeStr;



CTime day;



day=CTime::GetCurrentTime();



int filenameday,filenamemonth,filenameyear,filehour,filemin,filesec;



filenameday=day.GetDay();//dd



filenamemonth=day.GetMonth();//mm月份



filenameyear=day.GetYear();//yyyy



filehour=day.GetHour();//hh



filemin=day.GetMinute();//mm分钟



filesec=day.GetSecond();//ss



timeStr.Format("%04d%02d%02d%02d%02d%02d",filenameyear,filenamemonth,filenameday,filehour,filemin,filesec);







sExcelFile = timeStr + ".xls"; //获取随机时间的文件名称



//打开选择路径窗口



CString pathName;



CString defaultDir = _T("C:\\outtest");



CString fileName=sExcelFile;



CString szFilters= _T("xls(*.xls)");



CFileDialog dlg(FALSE,defaultDir,fileName,OFN_HIDEREADONLY|OFN_READONLY,szFilters,NULL);



if(dlg.DoModal()==IDOK){



//获得保存位置



pathName = dlg.GetPathName();



}







sExcelFile = pathName;



return TRUE;



}







///



// void GetExcelDriver(CListCtrl* pList, CString strTitle)



// 参数:



// pList 需要导出的List控件指针



// strTitle 导出的数据表标题



// 说明:



// 导出CListCtrl控件的全部数据到Excel文件。Excel文件名由用户通过“另存为”



// 对话框输入指定。创建名为strTitle的工作表,将List控件内的所有数据(包括



// 列名和数据项)以文本的形式保存到Excel工作表中。保持行列关系。



//



// edit by [r]@dotlive.cnblogs.com



///



CString ExportListToExcel(CListCtrl* pList, CString strTitle)



{



CString warningStr;



if (pList->GetItemCount ()>0) {



CDatabase database;



CString sDriver;



CString sExcelFile;



CString sSql;



CString tableName = strTitle;







// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"



sDriver = GetExcelDriver();



if (sDriver.IsEmpty())



{



// 没有发现Excel驱动



AfxMessageBox("没有安装Excel!\n请先安装Excel软件才能使用导出功能!");



return NULL;



}







///默认文件名



if (!GetDefaultXlsFileName(sExcelFile))



return NULL;







// 创建进行存取的字符串



sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);







// 创建数据库 (既Excel表格文件)



if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )



{



// 创建表结构



int i;



LVCOLUMN columnData;



CString columnName;



int columnNum = 0;



CString strH;



CString strV;







sSql = "";



strH = "";



columnData.mask = LVCF_TEXT;



columnData.cchTextMax =100;



columnData.pszText = columnName.GetBuffer (100);



for(i=0;pList->GetColumn(i,&columnData);i++)



{



if (i!=0)



{



sSql = sSql + ", " ;



strH = strH + ", " ;



}



sSql = sSql + " " + columnData.pszText +" TEXT";



strH = strH + " " + columnData.pszText +" ";



}



columnName.ReleaseBuffer ();



columnNum = i;







sSql = "CREATE TABLE " + tableName + " ( " + sSql + " ) ";



database.ExecuteSQL(sSql);







// 插入数据项



int nItemIndex;



for (nItemIndex=0;nItemIndex<pList->GetItemCount ();nItemIndex++){



strV = "";



for(i=0;i<columnNum;i++)



{



if (i!=0)



{



strV = strV + ", " ;



}



strV = strV + " '" + pList->GetItemText(nItemIndex,i) +"' ";



}







sSql = "INSERT INTO "+ tableName



+" ("+ strH + ")"



+" VALUES("+ strV + ")";



database.ExecuteSQL(sSql);



}







}







// 关闭数据库



database.Close();







warningStr.Format("导出文件保存于%s!",sExcelFile);



AfxMessageBox(warningStr);



return sExcelFile;



}



}



#pragma endregion

使用的时候,直接生成gridview,然后调用就可以


CString cstresult =  ExportListToExcel(&m_MyListCtrl,"中药识别结果");




标签:return,sSql,Excel,CString,excel,生成,Path,图像识别,sExcelFile
From: https://blog.51cto.com/jsxyhelu2017/5968009

相关文章

  • 答题卡图像识别项目
    答题卡图像识别需求分析、市场分析和技术实现  P.S博客发布以来,获得多方的关注。相关内容我已经以教程的形式进行了整理发布(包括算法、硬件搭建和软件框架),如果需要请移步......
  • 为微信小程序生成信息二维码
    需求概述:要求用户在小程序某页面填写信息之后,点击提交信息,然后生成一个二维码,相关确认人员通过扫描二维码来确认用户的信息,相关的需求,比如我们平时的电影票二维码生成等等,......
  • Excel中功能清单转Project任务
    1.在E列输入公式: =IF(LEN(A2)>1,1,IF(LEN(B2)>1,2,IF(LEN(C2)>1,3)))公式说明:如果A列有数据就是1级,否则看B列,有数据就是2级,否则C列有数据就是3级。2.将Excel复制到Project......
  • 读入不规范成绩(多列并在一个单元格中)并生成规范的成绩
    例子:  方法:pandas读入txt文档,按照空格分隔,然后删除空列,用str替换掉得分:,最后生成新的excel文档importpandasaspdpath='政治.txt'df=pd.read_csv(p......
  • 读取与生成新的excel文件
    读取与生成新的excel文件:importpandasaspdpath="score.xlsx"df=pd.read_excel(path)#读文件df['主科总分']=df['语文']+df['数学']+df['英语']#......
  • 机器学习——自动生成古诗词
    自动生成古诗词一、选题背景自动生成古诗词的初衷是想培养中小学生的传统文化,感受中华上下五千年的古诗词魅力,并培养他们的作词能力,陶冶情操二、机器学习的实现步骤从......
  • 关于杀死窗体自身创建的Excel 进程,而不影响其他
    前置感谢http://www.cppblog.com/colys/archive/2009/02/09/25265.html#Post困扰很久的事情,vb.net或者C#处理完excel后,总会在进程中残留一个Excel进程,从最开始的硬退......
  • 用pythondocx批量生成Word文档
    流程 安装:pipinstallpython-doc-ihttps://pypi.tuna.tsinghua.edu.cn/simplepipinstallpython-docxfromdocximportDocumentfromdocx.enum.textimportWD_ALIGN_......
  • java处理excel文件的读写
    简述1、一般会将文件地址作为入参,对文件进行处理2、将文件放到File中:Filefile=newFile(fileName)3、判断文件是否存在:if(!file.exists()){returnnull;}4、将文件......
  • C# 使用QRCoder生成二维码
    @目录简介第一步安装Nuget包QRCoder第二步创建一个公共类QRCoderHelper.cs第三步窗体代码第四步实现方式简介最近瞎琢磨的一些小东西,也算是一个比较完整的二维码......