【My Project】映像匹配平台一

來源:互聯網
上載者:User

映像匹配 平台一

SkySeraph Mar 29th 2011  HQU

Email:zgzhaobo@gmail.com    QQ:452728574

Latest Modified Date:Mar 29th 2011 HQU

一 工具:VS2010+OpenCV2.0

     語言:CPP

二 原理:採用的是歸一化積相關灰階匹配

              原理可參考:http://wenku.baidu.com/view/48b0e93467ec102de2bd89eb.html

三 核心源碼

執行

//----------------------------------------------////模板匹配void CTemplateMatchDlg::OnBnClickedTemplatematch(){//  驗證if(pTmpImg == NULL){AfxMessageBox(_T("請先選擇模板!"));return;}if(iTmpImgType!=1 && iTmpImgType!=-1 ){AfxMessageBox(_T("模板必須是灰階/二值映像,請進行灰階化轉換!"));return;}//  驗證模板int h = pTmpImg->height;int w = pTmpImg->width;if(w > IMAGE_WIDTH || h > IMAGE_HEIGHT){AfxMessageBox(_T("模板尺寸大於源映像尺寸,請重新選擇模板!"));return;}//  更改游標形狀BeginWaitCursor();//  進行模板匹配TemplateMatch(pWorkImg,pTmpImg);//  顯示ShowImage(pWorkImg, IDC_PICSHOW3);//  恢複游標形狀EndWaitCursor();}

匹配

//----------------------------------------------////模板匹配:歸一化積相關灰階匹配/*----------------------------------------------/----------------------------------------------*/void CTemplateMatchDlg::TemplateMatch(IplImage* img, IplImage* tmpImg){//迴圈變數int i, j, m, n;double dSumT; //模板元素的平方和double dSumS; //映像子領域元素的平方和double dSumST; //映像子領域和模板的點積//響應值/相似性測度double R;//記錄當前的最大響應double MaxR;//最大響應出現位置int nMaxX = 0;int nMaxY = 0;//源映像的高、寬int nHeight = img->width;int nWidth = img->height;int nStep = img->widthStep;uchar* cData;cData = (uchar*)img->imageData;//模板的高、寬int nTplHeight = tmpImg->width;int nTplWidth = tmpImg->height;int nTplStep = tmpImg->widthStep;uchar* cTplData;cTplData = (uchar*)tmpImg->imageData;//計算 dSumT:模板元素的平方和dSumT = 0;for (m = 0;m < nTplHeight ;m++){for(n = 0;n < nTplWidth ;n++){// 模板映像第m行,第n個象素的灰階值int nGray = cTplData[m*nTplStep+n];dSumT += (double)nGray*nGray;}}//找到映像中最大響應/最大相似性的出現位置MaxR = 0;for (i = 0;i < nHeight - nTplHeight +1 ;i++){for(j = 0;j < nWidth - nTplWidth + 1;j++){dSumST = 0;dSumS = 0;for (m = 0;m < nTplHeight ;m++){for(n = 0;n < nTplWidth ;n++){// 原映像第i+m行,第j+n列象素的灰階值int nGraySrc  = cData[(i+m)*nStep+(j+n)];// 模板映像第m行,第n個象素的灰階值int nGrayTpl = cTplData[m*nTplStep+ m];dSumS += (double)nGraySrc*nGraySrc;dSumST += (double)nGraySrc*nGrayTpl;}}R = dSumST / ( sqrt(dSumS)*sqrt(dSumT));//計算相關響應/相似性//與最大相似性比較if (R > MaxR){MaxR = R;nMaxX = j;nMaxY = i;}}}//清空靶心圖表像/對靶心圖表像的像素進行賦值if(img)for (m = 0;m < nHeight ;m++){for(n = 0;n < nWidth ;n++){cData[m*nStep+n] = cData[m*nStep+n]/2;  //像素值減半}}//cvZero(img); //int nStep2 = img->widthStep;//uchar* cData2;//cData2 = (uchar*)img->imageData;//將找到的首選地區複製到靶心圖表像for (m = 0;m < nTplHeight ;m++){for(n = 0;n < nTplWidth ;n++){int nGray = cTplData[m*nTplStep+n];//cData[m*nStep+n] = 0;cData[(nMaxY+m)*nStep+(nMaxX+n)] = RGB(nGray, nGray, nGray);}}}

四 效果

介面

處理結果

 

   Author:         SKySeraph

Email/GTalk: zgzhaobo@gmail.com    QQ:452728574

From:         http://www.cnblogs.com/skyseraph/

本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,請尊重作者的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.