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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? suanfa1.cpp

?? 1.采集到的車牌照圖片使用的是24位RGB的BMP位圖
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
*   該函數(shù)對DIB圖像進(jìn)行中值濾波。
*
************************************************************************/

BOOL WINAPI myMedianFilter(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, 
						   int iFilterH, int iFilterW, 
						   int iFilterMX, int iFilterMY)
{
	
	// 指向源圖像的指針
	unsigned char*	lpSrc;
	
	// 指向要復(fù)制區(qū)域的指針
	unsigned char*	lpDst;
	
	// 指向復(fù)制圖像的指針
	LPSTR			lpNewDIBBits;
	HLOCAL			hNewDIBBits;
	
	// 指向濾波器數(shù)組的指針
	unsigned char	* aValue;
	HLOCAL			hArray;
	
	// 循環(huán)變量
	LONG			i;
	LONG			j;
	LONG			k;
	LONG			l;
	
	// 圖像每行的字節(jié)數(shù)
	LONG			lLineBytes;
	
	// 計算圖像每行的字節(jié)數(shù)
	lLineBytes = WIDTHBYTES(lWidth * 8);
	
	// 暫時分配內(nèi)存,以保存新圖像
	hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);
	
	// 判斷是否內(nèi)存分配失敗
	if (hNewDIBBits == NULL)
	{
		// 分配內(nèi)存失敗
		return FALSE;
	}
	
	// 鎖定內(nèi)存
	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);
	
	// 初始化圖像為原始圖像
	memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * lHeight);
	
	// 暫時分配內(nèi)存,以保存濾波器數(shù)組
	hArray = LocalAlloc(LHND, iFilterH * iFilterW);
	
	// 判斷是否內(nèi)存分配失敗
	if (hArray == NULL)
	{
		// 釋放內(nèi)存
		LocalUnlock(hNewDIBBits);
		LocalFree(hNewDIBBits);
		
		// 分配內(nèi)存失敗
		return FALSE;
	}
	
	// 鎖定內(nèi)存
	aValue = (unsigned char * )LocalLock(hArray);
	
	// 開始中值濾波
	// 行(除去邊緣幾行)
	for(i = iFilterMY; i < lHeight - iFilterH + iFilterMY + 1; i++)
	{
		// 列(除去邊緣幾列)
		for(j = iFilterMX; j < lWidth - iFilterW + iFilterMX + 1; j++)
		{
			// 指向新DIB第i行,第j個象素的指針
			lpDst = (unsigned char*)lpNewDIBBits + lLineBytes * (lHeight - 1 - i) + j;
			
			// 讀取濾波器數(shù)組
			for (k = 0; k < iFilterH; k++)
			{
				for (l = 0; l < iFilterW; l++)
				{
					// 指向DIB第i - iFilterMY + k行,第j - iFilterMX + l個象素的指針
					lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i + iFilterMY - k) + j - iFilterMX + l;
					
					// 保存象素值
					aValue[k * iFilterW + l] = *lpSrc;
				}
			}
			
			// 獲取中值
			* lpDst = myGetMedianNum(aValue, iFilterH * iFilterW);
		}
	}
	
	// 復(fù)制變換后的圖像
	memcpy(lpDIBBits, lpNewDIBBits, lLineBytes * lHeight);
	
	// 釋放內(nèi)存
	LocalUnlock(hNewDIBBits);
	LocalFree(hNewDIBBits);
	LocalUnlock(hArray);
	LocalFree(hArray);
	
	// 返回
	return TRUE;
}

/*************************************************************************
*
* 函數(shù)名稱:
*   GetMedianNum()
*
* 參數(shù):
*   unsigned char * bpArray	- 指向要獲取中值的數(shù)組指針
*   int   iFilterLen			- 數(shù)組長度
*
* 返回值:
*   unsigned char      - 返回指定數(shù)組的中值。
*
* 說明:
*   該函數(shù)用冒泡法對一維數(shù)組進(jìn)行排序,并返回數(shù)組元素的中值。
*
************************************************************************/

unsigned char WINAPI myGetMedianNum(unsigned char * bArray, int iFilterLen)
{
	// 循環(huán)變量
	int		i;
	int		j;
	
	// 中間變量
	unsigned char bTemp;
	
	// 用冒泡法對數(shù)組進(jìn)行排序
	for (j = 0; j < iFilterLen - 1; j ++)
	{
		for (i = 0; i < iFilterLen - j - 1; i ++)
		{
			if (bArray[i] > bArray[i + 1])
			{
				// 互換
				bTemp = bArray[i];
				bArray[i] = bArray[i + 1];
				bArray[i + 1] = bTemp;
			}
		}
	}
	
	// 計算中值
	if ((iFilterLen & 1) > 0)
	{
		// 數(shù)組有奇數(shù)個元素,返回中間一個元素
		bTemp = bArray[(iFilterLen + 1) / 2];
	}
	else
	{
		// 數(shù)組有偶數(shù)個元素,返回中間兩個元素平均值
		bTemp = (bArray[iFilterLen / 2] + bArray[iFilterLen / 2 + 1]) / 2;
	}
	
	// 返回中值
	return bTemp;
}

/*************************************************************************
*
* 函數(shù)名稱:
*   InteEqualize()
*
* 參數(shù):
*   LPSTR lpDIBBits    - 指向源DIB圖像指針
*   LONG  lWidth       - 源圖像寬度(象素數(shù))
*   LONG  lHeight      - 源圖像高度(象素數(shù))
*
* 返回值:
*   BOOL               - 成功返回TRUE,否則返回FALSE。
*
* 說明:
*   該函數(shù)用來對圖像進(jìn)行直方圖均衡。
*
************************************************************************/
BOOL WINAPI InteEqualize(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向源圖像的指針
	unsigned char*	lpSrc;
	
	// 臨時變量
	LONG	lTemp;
	
	// 循環(huán)變量
	LONG	i;
	LONG	j;
	
	// 灰度映射表
	BYTE	bMap[256];
	
	// 灰度映射表
	LONG	lCount[256];
	
	// 圖像每行的字節(jié)數(shù)
	LONG	lLineBytes;
	
	// 計算圖像每行的字節(jié)數(shù)
	lLineBytes = WIDTHBYTES(lWidth * 8);
	
	// 重置計數(shù)為0
	for (i = 0; i < 256; i ++)
	{
		// 清零
		lCount[i] = 0;
	}
	
	// 計算各個灰度值的計數(shù)
	for (i = 0; i < lHeight; i ++)
	{
		for (j = 0; j < lWidth; j ++)
		{
			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;
			
			// 計數(shù)加1
			lCount[*(lpSrc)]++;
		}
	}
	
	// 計算灰度映射表
	for (i = 0; i < 256; i++)
	{
		// 初始為0
		lTemp = 0;
		
		for (j = 0; j <= i ; j++)
		{
			lTemp += lCount[j];
		}
		
		// 計算對應(yīng)的新灰度值
		bMap[i] = (BYTE) (lTemp * 255 / lHeight / lWidth);
	}
	
	// 每行
	for(i = 0; i < lHeight; i++)
	{
		// 每列
		for(j = 0; j < lWidth; j++)
		{
			// 指向DIB第i行,第j個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
			
			// 計算新的灰度值
			*lpSrc = bMap[*lpSrc];
		}
	}
	
	// 返回
	return TRUE;
}

/*************************************************************************
*
* 函數(shù)名稱:
*   AddMinusDIB()
*
* 參數(shù):
*   LPSTR lpDIBBits    - 指向源DIB圖像指針
*   LPSTR lpDIBBitsBK  - 指向背景DIB圖像指針
*   LONG  lWidth       - 源圖像寬度(象素數(shù))
*   LONG  lHeight      - 源圖像高度(象素數(shù))
*	 bool  bAddMinus	- 為true時執(zhí)行加運(yùn)算,否則執(zhí)行減運(yùn)算。
*
* 返回值:
*   BOOL               - 運(yùn)算成功返回TRUE,否則返回FALSE。
*
* 說明:
* 該函數(shù)用于對兩幅圖像進(jìn)行加減運(yùn)算。
* 
* 要求目標(biāo)圖像為255個灰度值的灰度圖像。
************************************************************************/

BOOL WINAPI AddMinusDIB(LPSTR lpDIBBits, LPSTR lpDIBBitsBK, LONG lWidth, LONG lHeight ,bool bAddMinus)
{
	
	// 指向源圖像的指針
	LPSTR	lpSrc,lpSrcBK;
	
	// 指向緩存圖像的指針
	LPSTR	lpDst;
	
	// 指向緩存DIB圖像的指針
	LPSTR	lpNewDIBBits;
	HLOCAL	hNewDIBBits;
	
	//循環(huán)變量
	long i;
	long j;
	
	//像素值
	unsigned char pixel,pixelBK;
	
	// 圖像每行的字節(jié)數(shù)
	LONG lLineBytes;
	
	// 暫時分配內(nèi)存,以保存新圖像
	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);
	
	if (hNewDIBBits == NULL)
	{
		// 分配內(nèi)存失敗
		return FALSE;
	}
	
	// 鎖定內(nèi)存
	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);
	
	// 初始化新分配的內(nèi)存,設(shè)定初始值為255
	lpDst = (char *)lpNewDIBBits;
	memset(lpDst, (BYTE)255, lWidth * lHeight);
	
	// 計算圖像每行的字節(jié)數(shù)
	lLineBytes = WIDTHBYTES(lWidth * 8);
	
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lWidth ;i++)
		{
			// 指向源圖像倒數(shù)第j行,第i個象素的指針			
			lpSrc = (char *)lpDIBBits + lLineBytes * j + i;
			lpSrcBK = (char *)lpDIBBitsBK + lLineBytes * j + i;
			
			// 指向目標(biāo)圖像倒數(shù)第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;
				if(abs(pixel - pixelBK)<10)
					*lpDst=0;
				else
					*lpDst=pixel;
		}
	}
	
	
	// 復(fù)制腐蝕后的圖像
	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);
	
	// 釋放內(nèi)存
	LocalUnlock(hNewDIBBits);
	LocalFree(hNewDIBBits);
	
	// 返回
	return TRUE;
}

/*************************************************************************
*
* 函數(shù)名稱:
*   myCropDIB()
*
* 參數(shù):
*   HDIB hDIB          - 指向源DIB圖像句柄
*   LPRECT lpRect      - 指向要剪裁的矩形區(qū)域
*
* 返回值:
*   HDIB               - 返回裁剪后的矩形區(qū)域圖像句柄。
*
* 說明:
* 該函數(shù)用于對指定圖像進(jìn)行指定區(qū)域裁剪操作。
* 
* 要求目標(biāo)圖像為255個灰度值的灰度圖像。
************************************************************************/

HDIB WINAPI myCropDIB(HDIB hDIB, LPRECT lpRect)
{
	
	LPBITMAPINFO lpbmi = NULL; 
    LPBYTE       lpSourceBits, lpTargetBits, lpResult; 
    HDC			 hDC = NULL, hSourceDC, hTargetDC; 
    HBITMAP      hSourceBitmap, hTargetBitmap, hOldTargetBitmap, hOldSourceBitmap; 
    DWORD        dwSourceBitsSize, dwTargetBitsSize, dwTargetHeaderSize; 
	int			 nWidth, nHeight;
	HDIB		 hNewDIB;
	DWORD		 dwSize;
	
	// Get DIB pointer
	if (! hDIB)
	{
		return NULL;
	}
	LPBITMAPINFO lpSrcDIB = (LPBITMAPINFO)GlobalLock(hDIB);
	if (! lpSrcDIB)
	{
		return NULL;
	}
	
    // Allocate and fill out a BITMAPINFO struct for the new DIB 
    dwTargetHeaderSize = sizeof( BITMAPINFOHEADER ) + PaletteSize((LPSTR)lpSrcDIB); 
    lpbmi = (LPBITMAPINFO)malloc( dwTargetHeaderSize ); 
	memcpy(lpbmi, lpSrcDIB, dwTargetHeaderSize);
	nWidth = RECTWIDTH(lpRect);
	nHeight = RECTHEIGHT(lpRect);
    lpbmi->bmiHeader.biWidth = nWidth; 
    lpbmi->bmiHeader.biHeight = nHeight; 
	
    // Gonna use DIBSections and BitBlt() to do the conversion, so make 'em 
	hDC = ::GetDC( NULL ); 
    hTargetBitmap = CreateDIBSection( hDC, lpbmi, DIB_RGB_COLORS, (VOID **)&lpTargetBits, NULL, 0 ); 
    hSourceBitmap = CreateDIBSection( hDC, lpSrcDIB, DIB_RGB_COLORS, (VOID **)&lpSourceBits, NULL, 0 ); 
    hSourceDC = CreateCompatibleDC( hDC ); 
    hTargetDC = CreateCompatibleDC( hDC ); 
	
    // Flip the bits on the source DIBSection to match the source DIB 
    dwSourceBitsSize = lpSrcDIB->bmiHeader.biHeight * BytesPerLine((LPBYTE)&(lpSrcDIB->bmiHeader)); 
    dwTargetBitsSize = lpbmi->bmiHeader.biHeight * BytesPerLine((LPBYTE)&(lpbmi->bmiHeader)); 
    memcpy( lpSourceBits, FindDIBBits((LPSTR)lpSrcDIB), dwSourceBitsSize ); 
    lpbmi->bmiHeader.biSizeImage = dwTargetBitsSize; 
	
    // Select DIBSections into DCs 
    hOldSourceBitmap = (HBITMAP)SelectObject( hSourceDC, hSourceBitmap ); 
    hOldTargetBitmap = (HBITMAP)SelectObject( hTargetDC, hTargetBitmap ); 
	
	// put old bitmap in new bitmap 
    BitBlt(hTargetDC, 0, 0, nWidth, nHeight, hSourceDC, lpRect->left, lpRect->top, SRCCOPY); 
	
    // Clean up and delete the DCs 
    SelectObject( hSourceDC, hOldSourceBitmap ); 
    SelectObject( hTargetDC, hOldTargetBitmap ); 
    DeleteDC( hSourceDC ); 
    DeleteDC( hTargetDC ); 
    ::ReleaseDC( NULL, hDC ); 
	
    // Flush the GDI batch, so we can play with the bits 
    GdiFlush(); 
	
    // Allocate enough memory for the new CF_DIB, and copy bits 
	dwSize = dwTargetHeaderSize + dwTargetBitsSize;
	hNewDIB =(HDIB)GlobalAlloc(GHND, dwSize);
    lpResult = (LPBYTE)GlobalLock(hNewDIB);//malloc( dwTargetHeaderSize + dwTargetBitsSize ); 
    memcpy( lpResult, lpbmi, dwTargetHeaderSize ); 
    memcpy( FindDIBBits( (LPSTR)lpResult ), lpTargetBits, dwTargetBitsSize ); 
	
    // final cleanup 
    DeleteObject( hTargetBitmap ); 
    DeleteObject( hSourceBitmap ); 
    free( lpbmi ); 
	GlobalUnlock(hDIB);
	GlobalUnlock(hNewDIB);
	
    return hNewDIB;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av网站免费在线| 亚洲色图另类专区| 免费xxxx性欧美18vr| 欧美老女人第四色| 亚洲成年人网站在线观看| 欧美蜜桃一区二区三区| 日韩国产一区二| 精品国产精品网麻豆系列| 国产一区美女在线| 国产精品萝li| 欧美系列在线观看| 美女一区二区在线观看| 国产日韩欧美精品在线| 色婷婷久久99综合精品jk白丝| 亚洲自拍偷拍麻豆| 欧美大片在线观看| 成人av电影观看| 亚洲电影在线免费观看| 精品久久一区二区三区| 99视频超级精品| 日精品一区二区| 久久五月婷婷丁香社区| 99re热这里只有精品免费视频| 亚洲午夜精品久久久久久久久| 日韩一二三区视频| 99久久国产综合精品色伊| 亚洲国产aⅴ天堂久久| www欧美成人18+| 色婷婷一区二区三区四区| 蜜乳av一区二区| 一区二区中文字幕在线| 91精品国产aⅴ一区二区| 国产91精品露脸国语对白| 亚洲国产人成综合网站| 久久久国产精华| 欧美日韩久久久| 波多野结衣一区二区三区| 日本不卡高清视频| 亚洲人成亚洲人成在线观看图片 | 91视频国产观看| 久久 天天综合| 亚洲九九爱视频| 久久久久久久久久久久久久久99| 91传媒视频在线播放| 国产精品69久久久久水密桃 | 亚洲激情成人在线| 国产亚洲一区字幕| 欧美精品vⅰdeose4hd| av男人天堂一区| 一区二区在线观看不卡| 欧美不卡一区二区| 欧美日韩免费视频| 99国产麻豆精品| 国产乱理伦片在线观看夜一区| 亚洲福利视频导航| 亚洲免费看黄网站| 国产清纯在线一区二区www| 欧美一区二区三区日韩| 日本黄色一区二区| 国产99精品视频| 激情综合五月婷婷| 日韩中文字幕亚洲一区二区va在线| 亚洲视频狠狠干| 中文字幕制服丝袜成人av | 久久影院视频免费| 日韩精品一区二| 欧美精品电影在线播放| 欧美伊人精品成人久久综合97| 91在线精品一区二区三区| 成人在线一区二区三区| 国产一区在线视频| 韩日精品视频一区| 蜜臀a∨国产成人精品| 青青草原综合久久大伊人精品优势| 亚洲图片欧美视频| 亚洲国产三级在线| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲视频狠狠干| 亚洲综合在线电影| 亚洲成人av一区| 日韩国产精品久久| 久久精品国产免费看久久精品| 免费欧美在线视频| 老汉av免费一区二区三区| 美国一区二区三区在线播放| 免费看黄色91| 国产美女主播视频一区| 国产一区二区三区在线观看免费视频| 色婷婷亚洲精品| 欧美色网一区二区| 欧美丰满少妇xxxbbb| 91精品婷婷国产综合久久性色 | 欧美疯狂性受xxxxx喷水图片| 欧美人动与zoxxxx乱| 欧美一二三区在线| 久久先锋影音av鲁色资源网| 中文字幕不卡在线| 亚洲区小说区图片区qvod| 一级女性全黄久久生活片免费| 亚洲国产综合人成综合网站| 亚洲18女电影在线观看| 精品一区二区影视| 成人av中文字幕| 在线看一区二区| 日韩视频一区二区| 中文字幕免费一区| 亚洲电影一区二区| 国模无码大尺度一区二区三区| 国产盗摄精品一区二区三区在线| 一本一道波多野结衣一区二区| 欧美日韩成人综合天天影院| 精品av综合导航| 亚洲欧洲日韩一区二区三区| 丝袜美腿亚洲一区二区图片| 国产一区二区三区免费在线观看| 99久久免费精品高清特色大片| 欧美日韩精品欧美日韩精品一| 精品国产免费视频| 亚洲精品久久嫩草网站秘色| 免费在线观看成人| av一区二区三区黑人| 91精品视频网| 国产精品成人网| 久久狠狠亚洲综合| 在线观看网站黄不卡| 久久这里只精品最新地址| 洋洋av久久久久久久一区| 极品尤物av久久免费看| 欧美专区在线观看一区| 国产亚洲短视频| 日韩精品欧美成人高清一区二区| 成人性生交大合| 欧美成人精品福利| 亚洲一区二区视频| 成人小视频在线| 日韩欧美色综合网站| 亚洲色大成网站www久久九九| 久久精品国产77777蜜臀| 欧美在线影院一区二区| 欧美国产精品一区二区三区| 免费看日韩a级影片| 欧洲视频一区二区| 国产精品传媒视频| 国产一区二区三区蝌蚪| 337p亚洲精品色噜噜| 亚洲精品中文字幕在线观看| 国产成人av电影在线观看| 欧美变态tickling挠脚心| 亚洲国产精品久久久男人的天堂| gogo大胆日本视频一区| 久久久久久97三级| 久草热8精品视频在线观看| 欧美日韩成人在线一区| 亚洲成人免费观看| 欧美在线观看视频一区二区三区| 国产精品视频在线看| 国产精品12区| 久久综合色天天久久综合图片| 蜜桃视频免费观看一区| 91精品国产综合久久福利| 亚洲成人av中文| 欧美日韩不卡一区| 亚洲国产精品欧美一二99| 精品视频在线看| 亚洲sss视频在线视频| 在线免费观看日本欧美| 亚洲自拍偷拍综合| 欧美性视频一区二区三区| 一级日本不卡的影视| 欧洲av在线精品| 午夜视频在线观看一区二区| 欧美日韩国产免费一区二区 | 国产精品久久久久久久久果冻传媒 | 欧美图片一区二区三区| 亚洲一区二区三区四区在线| 欧美亚洲综合另类| 婷婷综合另类小说色区| 91精品国产色综合久久不卡蜜臀| 免费看欧美女人艹b| www激情久久| 丁香天五香天堂综合| 中文字幕中文在线不卡住| 91蜜桃免费观看视频| 亚洲国产精品久久不卡毛片| 欧美人牲a欧美精品| 麻豆久久久久久| 国产日本一区二区| 91在线观看美女| 日韩有码一区二区三区| 精品国产一区二区在线观看| 国产一级精品在线| 中文字幕亚洲在| 欧美日韩电影一区| 国产在线精品不卡| 国产精品久久二区二区| 在线观看不卡视频| 久久国产精品色| 国产精品久久久久久亚洲毛片| 在线看一区二区| 韩国女主播成人在线观看|