{ //获取文件名 UpdateData(TRUE); //首先判断图片格式(OpenCV可以处理的图片格式:BMP,JPG,...) CString sPath1 = sPath+"*.*"; bWorking = finder.FindFile(sPath1); while(bWorking) { bWorking = finder.FindNextFile(); CString sKind = finder.GetFileName(); if(sKind == "." || sKind == "..") continue; int nIndex=-1; int nLenTest = sKind.GetLength(); for(int k=nLenTest-1;k>=0;k--) { if(sKind.GetAt(k)!='.') { continue; } else { nIndex = k; break; } } CString s1 = sKind.Right(nLenTest-nIndex-1); if(s1 == "bmp" || s1 == "jpg" || s1 == "JPG" || s1 == "BMP") //待续 { sPath =sPath+"*."+s1; break; } else { MessageBox("影像图片格式不符合要求!"); return; } } //统计图片个数 bWorking = finder.FindFile(sPath); while (bWorking) { bWorking = finder.FindNextFile(); totalNum++; } if(totalNum==0) { MessageBox("此路径下无图片!"); return; } UnableAll(); //可以开始拼接,使所有按钮不可点,防止误操作 //设置进度条 m_CtrlProgress.SetRange(0,totalNum); m_CtrlProgress.SetPos(0); m_CtrlProgress.SetStep(1); bWorking = finder.FindFile(sPath); bool bProgress = false; //处理每幅图片 while (bWorking || (sSecondCut!="") || ((!bWorking)&&(sFirstCut!=""))) { CString temp=""; double dLat,dLon; if((sFirstCut!="")&&(sSecondCut!="")) { temp=sFirstCut; sFirstCut=""; dLat=dFirstLat; dLon=dFirstLon; bProgress=false; } else if((sFirstCut=="")&&(sSecondCut!="")) { temp=sSecondCut; sSecondCut=""; dLat=dSecondLat; dLon=dSecondLon; bProgress=false; } else if((!bWorking)&&(sFirstCut!="")) { temp=sFirstCut; sFirstCut=""; bProgress=false; } else { bProgress=true; bWorking = finder.FindNextFile(); temp= finder.GetFilePath(); //读取Excel内部数值 if(bHaveData) { recset.GetFieldValue((LPCTSTR)"纬度", sItem1); recset.GetFieldValue((LPCTSTR)"经度", sItem2); recset.GetFieldValue((LPCTSTR)"航向角", sItem3); dLat=atof(sItem1.GetBuffer(0)); dLon=atof(sItem2.GetBuffer(0)); // 移到下一行 recset.MoveNext(); } } if(pCurFrame) { cvReleaseImage(&pCurFrame); pCurFrame=NULL; } pCurFrame=cvLoadImage(temp.GetBuffer(0)); if(pCurFrame->width>nSpeedUp || pCurFrame->height>nSpeedUp) { if(pCurFrame->width>pCurFrame->height) beishu=pCurFrame->width/(nSpeedUp*1.0); else beishu=pCurFrame->height/(nSpeedUp*1.0); } smallSize.width=pCurFrame->width/beishu; smallSize.height=pCurFrame->height/beishu; smallFrame=cvCreateImage(smallSize,pCurFrame->depth,pCurFrame->nChannels); cvResize(pCurFrame,smallFrame,CV_INTER_LINEAR); //视频采集卡图片 // smallReverseFrame=cvCreateImage(smallSize,pCurFrame->depth,pCurFrame->nChannels); // ReverseFrame(smallFrame,smallReverseFrame); //视频采集卡图片完毕 if(nFailTime==2) { nMode=0; nFailTime=0; } int curTime1=GetTickCount(); if(nMode==0 && bHaveData) //根据航向角校正图片 { double dItem3=0; dItem3=atof(sItem3.GetBuffer(0)); NavigationModify(smallFrame,smallReverseFrame,dItem3); pMosaic->SetLatAndLon(dLat,dLon); bIsFailed=pMosaic->ImageMosaic(smallReverseFrame,nMode); //处理当前帧 } else { pMosaic->SetLatAndLon(dLat,dLon); bIsFailed=pMosaic->ImageMosaic(smallFrame,nMode); //处理当前帧 } nMosaicTime+=GetTickCount()-curTime1; //SetFocus(); if(bProgress) //标志此帧不是向后退的帧 { m_CtrlProgress.StepIt(); } if(bIsFailed==0) //fail { nFailTime++; if(nFailTime==1) { sFirstCut=temp; dFirstLat=dLat; dFirstLon=dLon; } else if(nFailTime==2) { sSecondCut=temp; dSecondLat=dLat; dSecondLon=dLon; } } else if(bIsFailed==2) //拼接图大小到达上限 { nMode=0; nFailTime=0; sFirstCut=""; } else if(bIsFailed==1) //拼接成功 { nMode=1; nFailTime=0; sFirstCut=""; } cvReleaseImage(&pCurFrame); pCurFrame=NULL; cvReleaseImage(&smallFrame); smallFrame=NULL; if(smallReverseFrame) { cvReleaseImage(&smallReverseFrame); } // cvReleaseImage(&smallReverseFrame); // smallReverseFrame=NULL; } pMosaic->SaveLastImage(); }