亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dlgrecmatch.cpp

?? 《Visual C++數字圖像獲取 處理及實踐應用》一書的源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	pWnd=GetDlgItem(IDC_RECOG_MATCH);
	pWnd->GetWindowPlacement(winPlacement);
	winPlacement->rcNormalPosition.top = nIniImgBottom +15;
	winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60;
	pWnd->SetWindowPlacement(winPlacement);
		
	// 調整此對話框的大小	
	this->GetWindowPlacement(winPlacement);
	//winPlacement->rcNormalPosition.top = nIniImgtop -50;
	winPlacement->rcNormalPosition.bottom = nIniImgBottom + 272;
	winPlacement->rcNormalPosition.left   = nIniImgLeft   - 20;
	winPlacement->rcNormalPosition.right  = nIniImgRight  + 20;
	this->SetWindowPlacement(winPlacement);

	// 釋放已分配內存
	delete winPlacement;

	// 設置計算圖象控件位置標志位為TRUE
	m_bCalImgLoc = TRUE;
}

void CDlgRecMatch::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// 如果還沒有計算圖象的位置,則進行計算
	if(!m_bCalImgLoc){
		CalImageLocation();
	}

	// 顯示大小
	CSize sizeDisplay;

	// 顯示位置
	CPoint pointDisplay;
	
	// 顯示初始圖象
	if(!m_pDibInit->IsEmpty()){
		sizeDisplay.cx=m_pDibInit->m_lpBMIH->biWidth;
		sizeDisplay.cy=m_pDibInit->m_lpBMIH->biHeight;
		pointDisplay.x = m_rectInitImage.left;
		pointDisplay.y = m_rectInitImage.top;
		m_pDibInit->Draw(&dc,pointDisplay,sizeDisplay);		
	}
	
	// 顯示模板圖象
	if(!m_pDibModel->IsEmpty()){
		sizeDisplay.cx=m_pDibModel->m_lpBMIH->biWidth;
		sizeDisplay.cy=m_pDibModel->m_lpBMIH->biHeight;
		pointDisplay.x = m_rectModelImage.left;
		pointDisplay.y = m_rectModelImage.top;
		m_pDibModel->Draw(&dc,pointDisplay,sizeDisplay);		
	}

	// 顯示結果圖象
	if(!m_pDibResult->IsEmpty()){
		sizeDisplay.cx=m_pDibResult->m_lpBMIH->biWidth;
		sizeDisplay.cy=m_pDibResult->m_lpBMIH->biHeight;
		pointDisplay.x = m_rectResltImage.left;
		pointDisplay.y = m_rectResltImage.top;
		m_pDibResult->Draw(&dc,pointDisplay,sizeDisplay);		
	}

}

/*************************************************************************
 *
 * \函數名稱:
 *   TemplateMatch()
 *
 * \輸入參數:
 *   CDib*	pDibSrc		- 指向CDib類的指針,含有待匹配圖象信息 
 *   CDib*	pDibTemplate	- 指向CDib類的指針,含有模板圖象信息 
 *
 * \返回值:
 *   BOOL			- 成功則返回TRUE,否則返回FALSE
 *
 * \說明:
 *   該函數將對圖象進行模板匹配操作。需要注意的是,此程序只處理256灰度級的
 *圖象。
 *
 *************************************************************************
 */
BOOL CDlgRecMatch::TemplateMatch(CDib* pDibSrc, CDib* pDibTemplate)
{	
	// 指向源圖像的指針
	LPBYTE	lpSrc,lpTemplateSrc;
	
	// 指向緩存圖像的指針
	LPBYTE	lpDst;

	//循環變量
	long i;
	long j;
	long m;
	long n;

	//中間結果
	double dSigmaST;
	double dSigmaS;
	double dSigmaT;

	//相似性測度
	double R;

	//最大相似性測度
	double  dbMaxR;

	//最大相似性出現位置
	int nMaxWidth;
	int nMaxHeight;

	//像素值
	unsigned char unchPixel;
	unsigned char unchTemplatePixel;

	// 獲得圖象數據存儲的高度和寬度
	CSize sizeSaveImage;
	sizeSaveImage = pDibSrc->GetDibSaveDim();

	// 獲得模板圖象數據存儲的高度和寬度
	CSize sizeSaveTemplate;
	sizeSaveTemplate = pDibTemplate->GetDibSaveDim();


	// 暫時分配內存,以保存新圖像
	CDib* pDibNew;
	pDibNew = new CDib;

	// 如果分配內存失敗,則推出
	if(!CopyDIB(pDibSrc,pDibNew)){
		// 釋放已分配內存
		pDibNew->Empty();

		// 返回
		return FALSE;
	}
	

	// 初始化新分配的內存
	lpDst = (LPBYTE)pDibNew->m_lpImage; 
	
	// 圖象的高度
	int nImageHeight ;
	nImageHeight = pDibSrc->m_lpBMIH->biHeight;

	// 圖象的寬度
	int nImageWidth;
	nImageWidth = pDibSrc->m_lpBMIH->biWidth;

	// 模板圖象的高度
	int nTemplateHeight;
	nTemplateHeight = pDibTemplate->m_lpBMIH->biHeight;

	// 模板圖象的寬度
	int nTemplateWidth;
	nTemplateWidth = pDibTemplate->m_lpBMIH->biWidth;

	//計算dSigmaT
	dSigmaT = 0;
	for (n = 0;n < nTemplateHeight ;n++)
	{
		for(m = 0;m < nTemplateWidth ;m++)
		{
			// 指向模板圖像倒數第j行,第i個象素的指針			
			lpTemplateSrc = (LPBYTE)pDibTemplate->m_lpImage + sizeSaveTemplate.cx * n + m;
			unchTemplatePixel = (unsigned char)*lpTemplateSrc;
			dSigmaT += (double)unchTemplatePixel*unchTemplatePixel;
		}
	}

	//找到圖像中最大相似性的出現位置
	 dbMaxR = 0.0;
	for (j = 0;j < nImageHeight - nTemplateHeight +1 ;j++)
	{
		for(i = 0;i < nImageWidth - nTemplateWidth + 1;i++)
		{
			dSigmaST = 0;
			dSigmaS = 0;
	
			for (n = 0;n < nTemplateHeight ;n++)
			{
				for(m = 0;m < nTemplateWidth ;m++)
				{
					// 指向源圖像倒數第j+n行,第i+m個象素的指針			
					lpSrc  = (LPBYTE)pDibSrc->m_lpImage + sizeSaveImage.cx * (j+n) + (i+m);
			
					// 指向模板圖像倒數第n行,第m個象素的指針			
					lpTemplateSrc  = (LPBYTE)pDibTemplate->m_lpImage + sizeSaveTemplate.cx * n + m;

					unchPixel = (unsigned char)*lpSrc;
					unchTemplatePixel = (unsigned char)*lpTemplateSrc;

					dSigmaS += (double)unchPixel*unchPixel;
					dSigmaST += (double)unchPixel*unchTemplatePixel;
				}
			}
			//計算相似性
			R = dSigmaST / ( sqrt(dSigmaS)*sqrt(dSigmaT));
			//與最大相似性比較
			if (R >  dbMaxR)
			{
				 dbMaxR = R;
				nMaxWidth = i;
				nMaxHeight = j;
			}
		}
	}

	// 對目標圖象的象素進行賦值
	for(i=0; i<nImageHeight; i++)
		for( j=0; j<nImageWidth; j++){
			lpDst[i*sizeSaveImage.cx +j] /=2;			
		}

	//將最大相似性出現區域部分復制到目標圖像
	for (n = 0;n < nTemplateHeight ;n++)
	{
		for(m = 0;m < nTemplateWidth ;m++)
		{
			lpTemplateSrc = (LPBYTE)pDibTemplate->m_lpImage + sizeSaveTemplate.cx * n + m;
			lpDst = (LPBYTE)pDibNew->m_lpImage + sizeSaveImage.cx * (n+nMaxHeight) + (m+nMaxWidth);
			*lpDst = *lpTemplateSrc;
		}
	}
	
	// 復制圖像
	memcpy(pDibSrc->m_lpImage, pDibNew->m_lpImage, nImageWidth * nImageHeight);

	// 釋放內存
	pDibNew->Empty();
	
	// 返回
	return TRUE;
}


/*************************************************************************
 *
 * \函數名稱:
 *   OnRecogMatch()
 *
 * \輸入參數:
 *   無
 * 
 * \返回值:
 *   無
 *
 * \說明:
 *   根據圖象模板,在待匹配的圖象中找到匹配的位置
 *
 *************************************************************************
 */
void CDlgRecMatch::OnRecogMatch() 
{
	// 更改光標形狀
	BeginWaitCursor();

		// 分配結果圖象內存
	if(!m_pDibInit->IsEmpty()){
		// 如果分配內存失敗,則推出
		if(!CopyDIB(m_pDibInit,m_pDibResult)){
			
			// 釋放已分配內存
			m_pDibResult->Empty();

			// 返回
			return ;
		}	
	}

	// 設置計算圖象控件位置標志位為FALSE以重新設置圖象控件位置
	m_bCalImgLoc = FALSE;

	// 調用TemplateMatch()函數進行模板匹配
	if (TemplateMatch(m_pDibResult, m_pDibModel))
	{
		// 更新顯示
		Invalidate();
	}
	else
	{
		// 提示用戶
		MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK);
	}
	
	// 恢復光標
	EndWaitCursor();

	// 更新視圖
	Invalidate();

}

void CDlgRecMatch::OnOK() 
{
	// TODO: Add extra validation here
	// 釋放已分配內存
	if(!m_pDibModel->IsEmpty()){
		m_pDibModel->Empty();
		m_pDibModel = NULL;
	}
	if(!m_pDibResult->IsEmpty()){
		m_pDibResult->Empty();
		m_pDibResult = NULL;
	}

	CDialog::OnOK();
}

void CDlgRecMatch::OnCancel() 
{
	// TODO: Add extra cleanup here

	// 釋放已分配內存
	if(!m_pDibModel->IsEmpty()){
		m_pDibModel->Empty();
		m_pDibModel = NULL;
	}
	if(!m_pDibResult->IsEmpty()){
		m_pDibResult->Empty();
		m_pDibResult = NULL;
	}

	CDialog::OnCancel();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本到三区不卡视频| 精品一区二区三区欧美| 国产精品女人毛片| 中文在线一区二区| 国产色91在线| 亚洲人成7777| 亚洲一二三四在线观看| 午夜一区二区三区视频| 婷婷综合在线观看| 美女看a上一区| 韩国成人精品a∨在线观看| 国产麻豆一精品一av一免费| 国产剧情一区二区三区| 成人免费毛片片v| 色狠狠色狠狠综合| 欧美精品在线一区二区三区| 欧美一级午夜免费电影| 国产亚洲污的网站| 中文字幕一区二区三区不卡在线 | 午夜精品一区二区三区免费视频| 亚洲一卡二卡三卡四卡五卡| 男女男精品视频网| 国产69精品一区二区亚洲孕妇| 99久久夜色精品国产网站| 日本道色综合久久| 日韩午夜av一区| 国产精品污污网站在线观看| 亚洲综合偷拍欧美一区色| 日韩av中文在线观看| 大胆亚洲人体视频| 欧美日韩一级二级三级| 国产午夜亚洲精品不卡| 一区二区三区影院| 国产又粗又猛又爽又黄91精品| 91女人视频在线观看| 日韩视频在线你懂得| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲国产日韩av| 国产a视频精品免费观看| 在线观看日韩国产| 国产女主播视频一区二区| 午夜电影网亚洲视频| 国产aⅴ综合色| 欧美一级艳片视频免费观看| 亚洲欧美色综合| 国产成人精品亚洲日本在线桃色| 欧美午夜电影网| 国产精品水嫩水嫩| 久久国产福利国产秒拍| 色狠狠色狠狠综合| 国产精品久久久久久一区二区三区| 性做久久久久久| 91色在线porny| 欧美国产1区2区| 国内成人自拍视频| 日韩写真欧美这视频| 亚洲va国产va欧美va观看| 99免费精品视频| 国产欧美一区在线| 国产在线不卡一区| 精品少妇一区二区三区在线播放| 亚洲午夜精品在线| 一本一本大道香蕉久在线精品 | 亚洲私人影院在线观看| 黄页视频在线91| 日韩一级欧美一级| 午夜精品福利一区二区三区蜜桃| 99re热这里只有精品视频| 国产亚洲精品超碰| 精品中文字幕一区二区| 欧美成人激情免费网| 日本在线不卡视频一二三区| 欧美日韩国产一级| 亚洲高清不卡在线| 这里是久久伊人| 蜜臀av一区二区在线免费观看 | 粉嫩嫩av羞羞动漫久久久| 精品国产一区二区三区av性色 | 91久久免费观看| 亚洲欧美色一区| 欧美在线视频不卡| 亚洲第一福利视频在线| 欧美日韩不卡在线| 美女任你摸久久| 久久精品视频免费| 成人综合激情网| 亚洲欧美一区二区久久 | 欧美精品一区视频| 国产激情一区二区三区四区| 中文字幕av在线一区二区三区| 成年人国产精品| 亚洲6080在线| 欧美精品一区二区三区蜜臀| 国产不卡高清在线观看视频| 中文字幕日本不卡| 欧美日韩免费在线视频| 日韩1区2区日韩1区2区| 久久久久久黄色| 在线中文字幕不卡| 久久精品72免费观看| 国产精品久久久一本精品 | 精品国产91洋老外米糕| 成人免费观看视频| 亚洲国产精品久久人人爱| 日韩欧美色电影| 99视频精品全部免费在线| 亚洲成人动漫在线观看| 久久嫩草精品久久久久| 色综合久久88色综合天天免费| 日本不卡1234视频| 亚洲欧洲日韩女同| 91精品国产乱码久久蜜臀| 国产精一区二区三区| 亚洲少妇最新在线视频| 欧美精品一区男女天堂| 欧美日韩一区视频| 成人午夜av影视| 免费人成精品欧美精品| 综合久久一区二区三区| 亚洲精品在线三区| 欧美精品日韩一本| 91亚洲精品乱码久久久久久蜜桃 | 亚洲欧美日韩国产成人精品影院 | 欧美国产精品一区| 日韩欧美国产一区二区三区| 91亚洲精品一区二区乱码| 激情综合亚洲精品| 亚洲国产欧美另类丝袜| 亚洲欧洲成人自拍| 久久久久国产一区二区三区四区| 欧美午夜一区二区三区 | 亚洲高清免费在线| 最新欧美精品一区二区三区| 亚洲精品一区在线观看| 9191久久久久久久久久久| 91丨九色丨尤物| 国产寡妇亲子伦一区二区| 麻豆精品久久精品色综合| 亚洲一区成人在线| 一区二区高清视频在线观看| 国产蜜臀av在线一区二区三区| 欧美mv日韩mv国产网站app| 欧美日韩日日骚| 欧美日韩不卡在线| 欧美日韩一级大片网址| 在线亚洲高清视频| 色狠狠色狠狠综合| 色综合中文字幕| 色婷婷综合久久| 日本电影欧美片| 欧美日韩另类一区| 欧美性感一区二区三区| 欧美日韩一区中文字幕| 欧美色视频在线观看| 欧美日韩精品一区二区在线播放| 色吊一区二区三区| 欧美午夜不卡视频| 欧美日韩mp4| 欧美一二三在线| 欧美xxxx老人做受| 国产午夜精品一区二区三区四区| 国产清纯白嫩初高生在线观看91 | 久久久国产精品不卡| 国产色婷婷亚洲99精品小说| 国产精品网友自拍| 亚洲蜜臀av乱码久久精品| 一区二区三区视频在线观看| 亚洲高清不卡在线| 久久成人免费网| caoporen国产精品视频| 在线观看亚洲一区| 日韩一级高清毛片| 国产精品三级电影| 亚洲天堂av一区| 美女视频黄久久| 91亚洲精品久久久蜜桃| 日韩视频国产视频| 中文字幕精品三区| 五月婷婷另类国产| 国产乱对白刺激视频不卡| 91亚洲精品乱码久久久久久蜜桃| 欧美日韩精品一区二区在线播放| 久久伊人蜜桃av一区二区| 亚洲chinese男男1069| 国产成人免费在线| 欧美色成人综合| 国产日产亚洲精品系列| 亚洲国产一二三| 丁香婷婷综合五月| 777奇米成人网| 中文字幕在线不卡国产视频| 午夜精品久久久久久久久久久 | 亚洲乱码国产乱码精品精的特点| 极品少妇xxxx精品少妇| 91网站视频在线观看| 欧美v国产在线一区二区三区| 亚洲欧洲性图库| 狠狠色伊人亚洲综合成人| 欧美在线你懂的| 国产精品国产三级国产专播品爱网 |