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

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

?? detect.cpp

?? vc++數字圖像處理 ,是一本很不錯的介紹數字圖像方面的書籍,這里有本書的全部源碼
?? CPP
字號:
// ************************************************************************//  文件名:detect.cpp////  圖像分析與檢測API函數庫:////  ThresholdDIB()	- 圖像閾值分割運算//  AddMinusDIB()   - 圖像加減運算//  HprojectDIB()	- 圖像水平投影//  VprojectDIB()	- 圖像垂直投影//	TemplateDIB()	- 圖像模板匹配運算//// ************************************************************************#include "stdafx.h"#include "detect.h"#include "DIBAPI.h"#include <math.h>#include <direct.h>/************************************************************************* * * 函數名稱: *   ThresholdDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數) *   LONG  lHeight      - 源圖像高度(象素數) * * 返回值: *   BOOL               - 運算成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對圖像進行閾值分割運算。 *  ************************************************************************/BOOL WINAPI ThresholdDIB(LPSTR lpDIBBits,LONG lWidth, LONG lHeight){		// 指向源圖像的指針	LPSTR	lpSrc;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//循環變量	long i;	long j;	//像素值	unsigned char pixel;	//直方圖數組	long lHistogram[256];	//閾值,最大灰度值與最小灰度值,兩個區域的平均灰度值	unsigned char iThreshold,iNewThreshold,iMaxGrayValue,iMinGrayValue,iMean1GrayValue,iMean2GrayValue;	//用于計算區域灰度平均值的中間變量	long lP1,lP2,lS1,lS2;	//迭代次數	int iIterationTimes;	// 圖像每行的字節數	LONG lLineBytes;	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	// 計算圖像每行的字節數	lLineBytes = WIDTHBYTES(lWidth * 8);	for (i = 0; i < 256;i++)	{		lHistogram[i]=0;	}	//獲得直方圖	iMaxGrayValue = 0;	iMinGrayValue = 255;	for (i = 0;i < lWidth ;i++)	{		for(j = 0;j < lHeight ;j++)		{			// 指向源圖像倒數第j行,第i個象素的指針						lpSrc = (char *)lpDIBBits + lLineBytes * j + i;				pixel = (unsigned char)*lpSrc;						lHistogram[pixel]++;			//修改最大,最小灰度值			if(iMinGrayValue > pixel)			{				iMinGrayValue = pixel;			}			if(iMaxGrayValue < pixel)			{				iMaxGrayValue = pixel;			}		}	}	//迭代求最佳閾值	iNewThreshold = (iMinGrayValue + iMaxGrayValue)/2;	iThreshold = 0;		for(iIterationTimes = 0; iThreshold != iNewThreshold && iIterationTimes < 100;iIterationTimes ++)	{		iThreshold = iNewThreshold;		lP1 =0;		lP2 =0;		lS1 = 0;		lS2 = 0;		//求兩個區域的灰度平均值		for (i = iMinGrayValue;i < iThreshold;i++)		{			lP1 += lHistogram[i]*i;			lS1 += lHistogram[i];		}		iMean1GrayValue = (unsigned char)(lP1 / lS1);		for (i = iThreshold+1;i < iMaxGrayValue;i++)		{			lP2 += lHistogram[i]*i;			lS2 += lHistogram[i];		}		iMean2GrayValue = (unsigned char)(lP2 / lS2);		iNewThreshold =  (iMean1GrayValue + iMean2GrayValue)/2;	}	//根據閾值將圖像二值化	for (i = 0;i < lWidth ;i++)	{		for(j = 0;j < lHeight ;j++)		{			// 指向源圖像倒數第j行,第i個象素的指針						lpSrc = (char *)lpDIBBits + lLineBytes * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針						lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;			pixel = (unsigned char)*lpSrc;						if(pixel <= iThreshold)			{				*lpDst = (unsigned char)0;			}			else			{				*lpDst = (unsigned char)255;			}		}	}	// 復制圖像	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   AddMinusDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LPSTR lpDIBBitsBK  - 指向背景DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數) *   LONG  lHeight      - 源圖像高度(象素數) *	 bool  bAddMinus	- 為true時執行加運算,否則執行減運算。 * * 返回值: *   BOOL               - 運算成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對兩幅圖像進行加減運算。 *  * 要求目標圖像為255個灰度值的灰度圖像。 ************************************************************************/BOOL WINAPI AddMinusDIB(LPSTR lpDIBBits, LPSTR lpDIBBitsBK, LONG lWidth, LONG lHeight ,bool bAddMinus){		// 指向源圖像的指針	LPSTR	lpSrc,lpSrcBK;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//循環變量	long i;	long j;	//像素值	unsigned char pixel,pixelBK;	// 圖像每行的字節數	LONG lLineBytes;	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	// 計算圖像每行的字節數	lLineBytes = WIDTHBYTES(lWidth * 8);	for (j = 0;j < lHeight ;j++)	{		for(i = 0;i < lWidth ;i++)		{			// 指向源圖像倒數第j行,第i個象素的指針						lpSrc = (char *)lpDIBBits + lLineBytes * j + i;			lpSrcBK = (char *)lpDIBBitsBK + lLineBytes * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針						lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;			pixel = (unsigned char)*lpSrc;			pixelBK = (unsigned char)*lpSrcBK;			if(bAddMinus)				*lpDst = pixel + pixelBK > 255 ? 255 : pixel + pixelBK;			else				*lpDst = pixel - pixelBK < 0 ? 0 : pixel - pixelBK;		}	}				// 復制腐蝕后的圖像	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   HprojectDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數) *   LONG  lHeight      - 源圖像高度(象素數) * * 返回值: *   BOOL               - 運算成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對兩幅圖像進行水平投影運算。 *  * 要求目標圖像為只有0和255兩個灰度值的灰度圖像。 ************************************************************************/BOOL WINAPI HprojectDIB(LPSTR lpDIBBits,LONG lWidth, LONG lHeight){		// 指向源圖像的指針	LPSTR	lpSrc;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//循環變量	long i;	long j;	//圖像中每行內的黑點個數	long lBlackNumber;	//像素值	unsigned char pixel;	// 圖像每行的字節數	LONG lLineBytes;	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	// 計算圖像每行的字節數	lLineBytes = WIDTHBYTES(lWidth * 8);	for (j = 0;j < lHeight ;j++)	{		lBlackNumber = 0;		for(i = 0;i < lWidth ;i++)		{			// 指向源圖像倒數第j行,第i個象素的指針						lpSrc = (char *)lpDIBBits + lLineBytes * j + i;				pixel = (unsigned char)*lpSrc;			if (pixel != 255 && pixel != 0)			{				return false;			}			if(pixel == 0)			{				lBlackNumber++;			}		}		for(i = 0;i < lBlackNumber ;i++)		{				// 指向目標圖像倒數第j行,第i個象素的指針						lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;			*lpDst = (unsigned char)0;		}			}				// 復制投影圖像	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   VprojectDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數) *   LONG  lHeight      - 源圖像高度(象素數) * * 返回值: *   BOOL               - 運算成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對兩幅圖像進行垂直投影運算。 *  * 要求目標圖像為只有0和255兩個灰度值的灰度圖像。 ************************************************************************/BOOL WINAPI VprojectDIB(LPSTR lpDIBBits,LONG lWidth, LONG lHeight){		// 指向源圖像的指針	LPSTR	lpSrc;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//循環變量	long i;	long j;	//圖像中每行內的黑點個數	long lBlackNumber;	//像素值	unsigned char pixel;	// 圖像每行的字節數	LONG lLineBytes;	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	// 計算圖像每行的字節數	lLineBytes = WIDTHBYTES(lWidth * 8);	for (i = 0;i < lWidth ;i++)	{		lBlackNumber = 0;		for(j = 0;j < lHeight ;j++)		{			// 指向源圖像倒數第j行,第i個象素的指針						lpSrc = (char *)lpDIBBits + lLineBytes * j + i;				pixel = (unsigned char)*lpSrc;			if (pixel != 255 && pixel != 0)			{				return false;			}			if(pixel == 0)			{				lBlackNumber++;			}		}		for(j = 0;j < lBlackNumber ;j++)		{				// 指向目標圖像倒數第j行,第i個象素的指針						lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;			*lpDst = (unsigned char)0;		}			}				// 復制投影圖像	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   TemplateMatchDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LPSTR lpDIBBitsBK  - 指向背景DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數) *   LONG  lHeight      - 源圖像高度(象素數) *   LONG  lTemplateWidth       - 模板圖像寬度(象素數) *   LONG  lTemplateHeight      - 模板圖像高度(象素數) * * 返回值: *   BOOL               - 運算成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對圖像進行模板匹配運算。 *  * 要求目標圖像為255個灰度值的灰度圖像。 ************************************************************************/BOOL WINAPI TemplateMatchDIB (LPSTR lpDIBBits, LPSTR lpTemplateDIBBits, LONG lWidth, LONG lHeight,							  LONG lTemplateWidth,LONG lTemplateHeight){		// 指向源圖像的指針	LPSTR	lpSrc,lpTemplateSrc;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//循環變量	long i;	long j;	long m;	long n;	//中間結果	double dSigmaST;	double dSigmaS;	double dSigmaT;	//相似性測度	double R;	//最大相似性測度	double MaxR;	//最大相似性出現位置	long lMaxWidth;	long lMaxHeight;	//像素值	unsigned char pixel;	unsigned char templatepixel;	// 圖像每行的字節數	LONG lLineBytes,lTemplateLineBytes;	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	// 計算圖像每行的字節數	lLineBytes = WIDTHBYTES(lWidth * 8);	lTemplateLineBytes = WIDTHBYTES(lTemplateWidth * 8);	//計算dSigmaT	dSigmaT = 0;	for (n = 0;n < lTemplateHeight ;n++)	{		for(m = 0;m < lTemplateWidth ;m++)		{			// 指向模板圖像倒數第j行,第i個象素的指針						lpTemplateSrc = (char *)lpTemplateDIBBits + lTemplateLineBytes * n + m;			templatepixel = (unsigned char)*lpTemplateSrc;			dSigmaT += (double)templatepixel*templatepixel;		}	}	//找到圖像中最大相似性的出現位置	MaxR = 0.0;	for (j = 0;j < lHeight - lTemplateHeight +1 ;j++)	{		for(i = 0;i < lWidth - lTemplateWidth + 1;i++)		{			dSigmaST = 0;			dSigmaS = 0;				for (n = 0;n < lTemplateHeight ;n++)			{				for(m = 0;m < lTemplateWidth ;m++)				{					// 指向源圖像倒數第j+n行,第i+m個象素的指針								lpSrc  = (char *)lpDIBBits + lLineBytes * (j+n) + (i+m);								// 指向模板圖像倒數第n行,第m個象素的指針								lpTemplateSrc  = (char *)lpTemplateDIBBits + lTemplateLineBytes * n + m;					pixel = (unsigned char)*lpSrc;					templatepixel = (unsigned char)*lpTemplateSrc;					dSigmaS += (double)pixel*pixel;					dSigmaST += (double)pixel*templatepixel;				}			}			//計算相似性			R = dSigmaST / ( sqrt(dSigmaS)*sqrt(dSigmaT));			//與最大相似性比較			if (R > MaxR)			{				MaxR = R;				lMaxWidth = i;				lMaxHeight = j;			}		}	}	//將最大相似性出現區域部分復制到目標圖像	for (n = 0;n < lTemplateHeight ;n++)	{		for(m = 0;m < lTemplateWidth ;m++)		{			lpTemplateSrc = (char *)lpTemplateDIBBits + lTemplateLineBytes * n + m;			lpDst = (char *)lpNewDIBBits + lLineBytes * (n+lMaxHeight) + (m+lMaxWidth);			*lpDst = *lpTemplateSrc;		}	}		// 復制圖像	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	// 返回	return TRUE;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99视频一区二区| 国产精品电影一区二区三区| 久久九九国产精品| 免费高清不卡av| 在线不卡a资源高清| 一区二区三区在线视频免费| 国产一区二区福利视频| 精品成人佐山爱一区二区| 琪琪久久久久日韩精品| 欧美巨大另类极品videosbest | 国产在线一区二区综合免费视频| 69av一区二区三区| 日本不卡不码高清免费观看| 欧美人伦禁忌dvd放荡欲情| 综合久久久久久| 欧洲一区在线观看| 性感美女久久精品| 波多野结衣亚洲| 亚洲一区二区三区三| 色播五月激情综合网| 五月激情丁香一区二区三区| 在线播放中文字幕一区| 久久91精品久久久久久秒播| 久久久久国产精品麻豆ai换脸 | 国产精品一品二品| 欧美极品少妇xxxxⅹ高跟鞋 | 欧美日韩高清一区二区不卡| 亚洲va在线va天堂| 欧美欧美欧美欧美| 国产综合色精品一区二区三区| 欧美tickling网站挠脚心| 高清不卡在线观看| 国产日本欧美一区二区| 色哟哟一区二区三区| 天天影视色香欲综合网老头| 日韩精品一区二区三区在线播放| 国产在线视视频有精品| 亚洲乱码一区二区三区在线观看| 欧美男人的天堂一二区| 麻豆精品一区二区三区| 久久夜色精品一区| 97久久久精品综合88久久| 日韩国产精品久久久久久亚洲| 精品久久久久久无| 91首页免费视频| 男人的天堂久久精品| 国产精品系列在线| aaa亚洲精品一二三区| 香蕉久久一区二区不卡无毒影院| www国产精品av| 99精品国产视频| 久久精品噜噜噜成人av农村| 国产精品久久久久久久久免费丝袜| 色综合中文字幕国产 | 同产精品九九九| 日本一区二区高清| 欧美成人一区二区三区片免费| 不卡的av中国片| 久久国产尿小便嘘嘘尿| 精品国产乱码91久久久久久网站| 黄色精品一二区| 国产欧美日韩激情| 91黄视频在线| 国产成人亚洲综合a∨婷婷图片| 夜夜爽夜夜爽精品视频| 欧美一级高清片| 国产大陆亚洲精品国产| 美日韩一区二区| 天涯成人国产亚洲精品一区av| 18欧美乱大交hd1984| 26uuu国产电影一区二区| 欧美日韩在线三级| 99久久夜色精品国产网站| 狠狠色狠狠色合久久伊人| 亚洲精品视频在线看| 国产农村妇女精品| 69精品人人人人| 欧美视频在线观看一区二区| eeuss国产一区二区三区| 国产激情视频一区二区三区欧美| 日本美女一区二区三区视频| 夜夜精品视频一区二区| 亚洲人123区| 国产精品色哟哟网站| 日韩视频一区二区三区| 色狠狠综合天天综合综合| 不卡电影一区二区三区| 狠狠网亚洲精品| 亚洲国产成人91porn| 亚洲黄网站在线观看| 亚洲欧洲国产日韩| 中文字幕一区在线观看视频| 精品国产不卡一区二区三区| 精品欧美一区二区久久| 精品少妇一区二区三区日产乱码 | 亚洲成人av电影在线| 依依成人精品视频| 欧美韩日一区二区三区| 日韩美女一区二区三区四区| 欧美日韩夫妻久久| 欧美日韩综合不卡| 制服丝袜国产精品| 91精品婷婷国产综合久久竹菊| 欧美日本在线视频| 日韩欧美一区二区视频| 欧美老肥妇做.爰bbww| 日韩欧美第一区| 精品精品国产高清a毛片牛牛| 欧美sm极限捆绑bd| 国产亚洲污的网站| 久久久综合九色合综国产精品| 欧美精品一区视频| 日韩精品一区二区三区在线| 久久久激情视频| 综合中文字幕亚洲| 亚洲mv在线观看| 136国产福利精品导航| 亚洲精品网站在线观看| 日韩精品视频网站| 国产福利一区二区三区在线视频| 成人午夜免费av| 欧美日韩一区二区在线观看| 日韩欧美亚洲一区二区| 国产欧美日韩亚州综合 | 日av在线不卡| 国产一区二区三区久久久| 精品一区二区精品| 懂色一区二区三区免费观看 | 男男gaygay亚洲| 蜜芽一区二区三区| 国产麻豆一精品一av一免费| 成人永久免费视频| 91九色最新地址| 欧美电影免费观看高清完整版| 久久美女艺术照精彩视频福利播放| 日韩女同互慰一区二区| 欧美国产视频在线| 一级特黄大欧美久久久| 捆绑变态av一区二区三区| 国产一区二区精品久久| 色综合色狠狠天天综合色| 在线播放日韩导航| 欧美美女激情18p| 欧美本精品男人aⅴ天堂| 国产精品久久久久永久免费观看 | 日韩毛片在线免费观看| 樱花草国产18久久久久| 久久99热这里只有精品| 韩国欧美国产1区| 91麻豆精品国产| 亚洲女厕所小便bbb| 国产主播一区二区三区| 欧美日韩一区不卡| 一区在线播放视频| 国产乱一区二区| 欧美一区二区视频网站| 亚洲免费在线观看视频| 国产99精品国产| 日韩欧美国产午夜精品| 亚洲主播在线观看| k8久久久一区二区三区| 欧美成人综合网站| 日韩电影免费在线| 欧美亚洲另类激情小说| 国产精品久久久久精k8| 国产精品乡下勾搭老头1| 欧美va天堂va视频va在线| 亚洲电影一区二区| 在线亚洲人成电影网站色www| 久久精品综合网| 国内精品伊人久久久久av一坑| 3d成人h动漫网站入口| 亚洲一区视频在线观看视频| 99视频精品免费视频| 欧美韩国一区二区| 国产jizzjizz一区二区| 欧美一区二区三区性视频| 国产精品视频麻豆| 国产精品99久久久久久久vr| 欧美三级乱人伦电影| 亚洲综合色视频| 91成人看片片| 亚洲成人激情自拍| 欧美日韩激情一区二区三区| 一级日本不卡的影视| 欧美日韩在线播放三区四区| 夜夜揉揉日日人人青青一国产精品| 99久久伊人精品| 欧美激情在线看| 成人app软件下载大全免费| 国产精品久线观看视频| 在线免费观看日本一区| 午夜精品视频一区| 26uuu精品一区二区在线观看| 国产成人夜色高潮福利影视| 亚洲丝袜另类动漫二区| 欧美色图免费看| 日韩激情在线观看| 久久婷婷国产综合国色天香 | 久久精品夜色噜噜亚洲aⅴ|