zoukankan      html  css  js  c++  java
  • 如何生成excel文件作为图像识别结果

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

    在进行大规模图像处理的时候,如果能够以表格的形式生成结果文件,将非常的直观。这个时候,选择excel作为结果输出文件,将是合适的。
    查询相关资料,有很多关于excel的操作方法,但是使用mfc来进行excel的操作,总是要涉及到很多东西。
    一、采用csv方式
    实验如下:
    创建1.csv文件,使用记事本进行编辑
    而后使用excel进行打开
    效果很好。而csv的操作是可以直接采用文本编辑的方式生成的,可以直接采用std:file操作的方法来生成csv文件,然后使用excel打开就可以。
    再附上一段代码,是opencv官方提供的csv操作相关的,可以参考
    //创建或续写目录下的csv文件,填写“文件位置-分类”对
        int writeCsv(const stringfilename,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 stringfilenamechar separator) {
            pair<string,stringapair;
            string linepathclasslabel;
            vector<pair<string,string>> retVect;
            ifstream file(filename.c_str(), ifstream::in);
            if (!file
                return retVect;
            while (getline(fileline)) {
                stringstream liness(line);
                getline(linesspathseparator);
                getline(linessclasslabel);
                if(!path.empty() && !classlabel.empty()) {
                    apair.first = path;
                    apair.second = classlabel;
                    retVect.push_back(apair);
                }
     
            }
            return retVect;
        }
     
    二、采用xls方式
    涉及到的东西比较多,现在已经集成到了GOcvHelper中去
    #pragma region 
        //////////////////////////////////////////////////////////////////////////////
        //名称:GetExcelDriver
        //功能:获取ODBC中Excel驱动
        //作者:徐景周(jingzhou_xu@163.net)
        //组织:未来工作室(Future Studio)
        //日期:2002.9.1
        /////////////////////////////////////////////////////////////////////////////
        CString GetExcelDriver()
        {
            char szBuf[2001];
            WORD cbBufMax = 2000;
            WORD cbBufOut;
            char *pszBuf = szBuf;
            CString sDriver;
     
            // 获取已安装驱动的名称(涵数在odbcinst.h里)
            if (!SQLGetInstalledDrivers(szBufcbBufMax, &cbBufOut))
                return "";
     
            // 检索已安装的驱动是否有Excel...
            do
            {
                if (strstr(pszBuf"Excel") != 0)
                {
                    //发现 !
                    sDriver = CString(pszBuf);
                    break;
                }
                pszBuf = strchr(pszBuf'') + 1;
            }
            while (pszBuf[1] != '');
     
            return sDriver;
        }
     
        ///////////////////////////////////////////////////////////////////////////////
        //    BOOL MakeSurePathExists( CString &Path,bool FilenameIncluded)
        //    参数:
        //        Path                路径
        //        FilenameIncluded    路径是否包含文件名
        //    返回值:
        //        文件是否存在
        //    说明:
        //        判断Path文件(FilenameIncluded=true)是否存在,存在返回TURE,不存在返回FALSE
        //        自动创建目录
        //
        ///////////////////////////////////////////////////////////////////////////////
        BOOL MakeSurePathExistsCString &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(CStringsExcelFile)
        {
            ///默认文件名: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(CListCtrlpListCString 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! 请先安装Excel软件才能使用导出功能!");
                    return NULL;
                }
     
                ///默认文件名
                if (!GetDefaultXlsFileName(sExcelFile))
                    return NULL;
     
                // 创建进行存取的字符串
                sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="%s";DBQ=%s",sDriversExcelFilesExcelFile);
     
                // 创建数据库 (既Excel表格文件)
                ifdatabase.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,"中药识别结果");





  • 相关阅读:
    分布式MySQL数据库TDSQL架构分析
    Vector Clock理解
    MySQL Full Join的实现
    HDU4309-Seikimatsu Occult Tonneru(最大流)
    UVA 10831
    jdk并发包 CopyOnWriteArrayList源代码分析
    Android源代码下载之《Android新闻client源代码》
    [背景分离] 识别移动物体基于高斯混合 MOG
    我与京东的那些事儿
    Android4.4 Framework分析——Zygote进程的启动过程
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/5907490.html
Copyright © 2011-2022 走看看