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

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

?? templatetrans.cpp

?? vc++數字圖像處理 ,是一本很不錯的介紹數字圖像方面的書籍,這里有本書的全部源碼
?? CPP
字號:
/************************************************************************** *  文件名:TemplateTrans.cpp * *  圖像模板變換API函數庫: * *  Template()			- 圖像模板變換,通過改變模板,可以用它實現 *						  圖像的平滑、銳化、邊緣識別等操作。 *  MedianFilter()		- 圖像中值濾波。 *  GetMedianNum()		- 獲取中值。被函數MedianFilter()調用來求中值。 *  ReplaceColorPal()	- 更換偽彩色編碼表。 * *************************************************************************/#include "stdafx.h"#include "TemplateTrans.h"#include "DIBAPI.h"#include <math.h>#include <direct.h>/************************************************************************* * * 函數名稱: *   Template() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數) *   LONG  lHeight      - 源圖像高度(象素數) *   int   iTempH		- 模板的高度 *   int   iTempW		- 模板的寬度 *   int   iTempMX		- 模板的中心元素X坐標 ( < iTempW - 1) *   int   iTempMY		- 模板的中心元素Y坐標 ( < iTempH - 1) *	 FLOAT * fpArray	- 指向模板數組的指針 *	 FLOAT fCoef		- 模板系數 * * 返回值: *   BOOL               - 成功返回TRUE,否則返回FALSE。 * * 說明: *   該函數用指定的模板(任意大小)來對圖像進行操作,參數iTempH指定模板 * 的高度,參數iTempW指定模板的寬度,參數iTempMX和iTempMY指定模板的中心 * 元素坐標,參數fpArray指定模板元素,fCoef指定系數。 * ************************************************************************/BOOL WINAPI Template(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, 					 int iTempH, int iTempW, 					 int iTempMX, int iTempMY,					 FLOAT * fpArray, FLOAT fCoef){	// 指向復制圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;		// 指向源圖像的指針	unsigned char*	lpSrc;		// 指向要復制區域的指針	unsigned char*	lpDst;		// 循環變量	LONG	i;	LONG	j;	LONG	k;	LONG	l;		// 計算結果	FLOAT	fResult;		// 圖像每行的字節數	LONG lLineBytes;		// 計算圖像每行的字節數	lLineBytes = WIDTHBYTES(lWidth * 8);		// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);		// 判斷是否內存分配失敗	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);		// 初始化圖像為原始圖像	memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * lHeight);		// 行(除去邊緣幾行)	for(i = iTempMY; i < lHeight - iTempH + iTempMY + 1; i++)	{		// 列(除去邊緣幾列)		for(j = iTempMX; j < lWidth - iTempW + iTempMX + 1; j++)		{			// 指向新DIB第i行,第j個象素的指針			lpDst = (unsigned char*)lpNewDIBBits + lLineBytes * (lHeight - 1 - i) + j;						fResult = 0;						// 計算			for (k = 0; k < iTempH; k++)			{				for (l = 0; l < iTempW; l++)				{					// 指向DIB第i - iTempMY + k行,第j - iTempMX + l個象素的指針					lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i + iTempMY - k)						+ j - iTempMX + l;										// 保存象素值					fResult += (* lpSrc) * fpArray[k * iTempW + l];				}			}						// 乘上系數			fResult *= fCoef;						// 取絕對值			fResult = (FLOAT ) fabs(fResult);						// 判斷是否超過255			if(fResult > 255)			{				// 直接賦值為255				* lpDst = 255;			}			else			{				// 賦值				* lpDst = (unsigned char) (fResult + 0.5);			}					}	}		// 復制變換后的圖像	memcpy(lpDIBBits, lpNewDIBBits, lLineBytes * lHeight);		// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);		// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   MedianFilter() * * 參數: *   LPSTR lpDIBBits		- 指向源DIB圖像指針 *   LONG  lWidth			- 源圖像寬度(象素數) *   LONG  lHeight			- 源圖像高度(象素數) *   int   iFilterH			- 濾波器的高度 *   int   iFilterW			- 濾波器的寬度 *   int   iFilterMX		- 濾波器的中心元素X坐標 *   int   iFilterMY		- 濾波器的中心元素Y坐標 * * 返回值: *   BOOL					- 成功返回TRUE,否則返回FALSE。 * * 說明: *   該函數對DIB圖像進行中值濾波。 * ************************************************************************/BOOL WINAPI MedianFilter(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, 						 int iFilterH, int iFilterW, 						 int iFilterMX, int iFilterMY){		// 指向源圖像的指針	unsigned char*	lpSrc;		// 指向要復制區域的指針	unsigned char*	lpDst;		// 指向復制圖像的指針	LPSTR			lpNewDIBBits;	HLOCAL			hNewDIBBits;		// 指向濾波器數組的指針	unsigned char	* aValue;	HLOCAL			hArray;		// 循環變量	LONG			i;	LONG			j;	LONG			k;	LONG			l;		// 圖像每行的字節數	LONG			lLineBytes;		// 計算圖像每行的字節數	lLineBytes = WIDTHBYTES(lWidth * 8);		// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);		// 判斷是否內存分配失敗	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);		// 初始化圖像為原始圖像	memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * lHeight);		// 暫時分配內存,以保存濾波器數組	hArray = LocalAlloc(LHND, iFilterH * iFilterW);		// 判斷是否內存分配失敗	if (hArray == NULL)	{		// 釋放內存		LocalUnlock(hNewDIBBits);		LocalFree(hNewDIBBits);				// 分配內存失敗		return FALSE;	}		// 鎖定內存	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;						// 讀取濾波器數組			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 = GetMedianNum(aValue, iFilterH * iFilterW);		}	}		// 復制變換后的圖像	memcpy(lpDIBBits, lpNewDIBBits, lLineBytes * lHeight);		// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	LocalUnlock(hArray);	LocalFree(hArray);		// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   GetMedianNum() * * 參數: *   unsigned char * bpArray	- 指向要獲取中值的數組指針 *   int   iFilterLen			- 數組長度 * * 返回值: *   unsigned char      - 返回指定數組的中值。 * * 說明: *   該函數用冒泡法對一維數組進行排序,并返回數組元素的中值。 * ************************************************************************/unsigned char WINAPI GetMedianNum(unsigned char * bArray, int iFilterLen){	// 循環變量	int		i;	int		j;		// 中間變量	unsigned char bTemp;		// 用冒泡法對數組進行排序	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)	{		// 數組有奇數個元素,返回中間一個元素		bTemp = bArray[(iFilterLen + 1) / 2];	}	else	{		// 數組有偶數個元素,返回中間兩個元素平均值		bTemp = (bArray[iFilterLen / 2] + bArray[iFilterLen / 2 + 1]) / 2;	}		// 返回中值	return bTemp;}/************************************************************************* * * 函數名稱: *   GradSharp() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數) *   LONG  lHeight      - 源圖像高度(象素數) *   BYTE  bThre		- 閾值 * * 返回值: *   BOOL               - 成功返回TRUE,否則返回FALSE。 * * 說明: *   該函數用來對圖像進行梯度銳化。 * ************************************************************************/BOOL WINAPI GradSharp(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, BYTE bThre){		// 指向源圖像的指針	unsigned char*	lpSrc;	unsigned char*	lpSrc1;	unsigned char*	lpSrc2;		// 循環變量	LONG	i;	LONG	j;		// 圖像每行的字節數	LONG	lLineBytes;		// 中間變量	BYTE	bTemp;		// 計算圖像每行的字節數	lLineBytes = WIDTHBYTES(lWidth * 8);		// 每行	for(i = 0; i < lHeight; i++)	{		// 每列		for(j = 0; j < lWidth; j++)		{			// 指向DIB第i行,第j個象素的指針			lpSrc  = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i)+ j;						// 指向DIB第i+1行,第j個象素的指針			lpSrc1 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 2 - i) + j;						// 指向DIB第i行,第j+1個象素的指針			lpSrc2 = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j + 1;						bTemp = abs((*lpSrc)-(*lpSrc1)) + abs((*lpSrc)-(*lpSrc2));						// 判斷是否小于閾值			if (bTemp < 255)			{				// 判斷是否大于閾值,對于小于情況,灰度值不變。				if (bTemp >= bThre)				{					// 直接賦值為bTemp					*lpSrc = bTemp;				}			}			else			{				// 直接賦值為255				*lpSrc = 255;			}		}	}		// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   ReplaceColorPal() * * 參數: *   LPSTR lpDIB			- 指向源DIB圖像指針 *   BYTE * bpColorsTable	- 偽彩色編碼表 * * 返回值: *   BOOL					- 成功返回TRUE,否則返回FALSE。 * * 說明: *   該函數用指定的偽彩色編碼表來替換圖像的調試板,參數bpColorsTable * 指向要替換的偽彩色編碼表。 * ************************************************************************/BOOL WINAPI ReplaceColorPal(LPSTR lpDIB, BYTE * bpColorsTable){		// 循環變量	int i;		// 顏色表中的顏色數目	WORD wNumColors;		// 指向BITMAPINFO結構的指針(Win3.0)	LPBITMAPINFO lpbmi;		// 指向BITMAPCOREINFO結構的指針	LPBITMAPCOREINFO lpbmc;		// 表明是否是Win3.0 DIB的標記	BOOL bWinStyleDIB;		// 創建結果	BOOL bResult = FALSE;		// 獲取指向BITMAPINFO結構的指針(Win3.0)	lpbmi = (LPBITMAPINFO)lpDIB;		// 獲取指向BITMAPCOREINFO結構的指針	lpbmc = (LPBITMAPCOREINFO)lpDIB;		// 獲取DIB中顏色表中的顏色數目	wNumColors = ::DIBNumColors(lpDIB);			// 判斷顏色數目是否是256色	if (wNumColors == 256)	{				// 判斷是否是WIN3.0的DIB		bWinStyleDIB = IS_WIN30_DIB(lpDIB);				// 讀取偽彩色編碼,更新DIB調色板		for (i = 0; i < (int)wNumColors; i++)		{			if (bWinStyleDIB)			{				// 更新DIB調色板紅色分量				lpbmi->bmiColors[i].rgbRed = bpColorsTable[i * 4];								// 更新DIB調色板綠色分量				lpbmi->bmiColors[i].rgbGreen = bpColorsTable[i * 4 + 1];								// 更新DIB調色板藍色分量				lpbmi->bmiColors[i].rgbBlue = bpColorsTable[i * 4 + 2];								// 更新DIB調色板保留位				lpbmi->bmiColors[i].rgbReserved = 0;			}			else			{				// 更新DIB調色板紅色分量				lpbmc->bmciColors[i].rgbtRed = bpColorsTable[i * 4];								// 更新DIB調色板綠色分量				lpbmc->bmciColors[i].rgbtGreen = bpColorsTable[i * 4 + 1];								// 更新DIB調色板藍色分量				lpbmc->bmciColors[i].rgbtBlue = bpColorsTable[i * 4 + 2];			}		}	}		// 返回	return bResult;	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品久久久久中文字幕| 婷婷激情综合网| 制服丝袜中文字幕一区| 成人精品在线视频观看| 五月激情综合网| 综合网在线视频| 久久精品一区二区| 69堂精品视频| 欧美日韩亚洲综合一区| eeuss国产一区二区三区| 精品一区二区三区在线播放视频| 亚洲精品中文在线观看| 国产精品日日摸夜夜摸av| 日韩免费高清av| 欧美一区二区免费| 欧美精品第1页| 欧洲av在线精品| 91丝袜国产在线播放| 国产成人精品亚洲日本在线桃色| 美国十次了思思久久精品导航| 亚洲少妇屁股交4| 蜜臀久久久99精品久久久久久| 夜夜亚洲天天久久| 亚洲人成精品久久久久| 中文字幕第一区综合| 亚洲精品在线观看网站| 日韩欧美国产三级电影视频| 欧美日韩成人在线一区| 欧美系列在线观看| 欧美日韩中字一区| 欧洲生活片亚洲生活在线观看| 91尤物视频在线观看| 99久免费精品视频在线观看| 成人一区二区三区在线观看| 国产a级毛片一区| 国产成人在线视频免费播放| 国产精品一区二区在线观看网站| 国产一区二区在线视频| 国产毛片精品一区| 国产美女一区二区| 懂色av一区二区三区免费观看 | 欧美吻胸吃奶大尺度电影| 色哟哟日韩精品| 在线亚洲一区观看| 欧美日韩一区二区三区免费看| 在线免费观看日韩欧美| 欧美午夜影院一区| 3d动漫精品啪啪1区2区免费| 日韩一区二区视频在线观看| 欧美成人三级电影在线| 精品久久久久久久久久久久久久久| 日韩一卡二卡三卡国产欧美| 精品国产乱码久久久久久免费 | 亚洲电影欧美电影有声小说| 亚洲一区二区精品3399| 日韩电影免费一区| 精品一二三四在线| 丁香啪啪综合成人亚洲小说| 不卡一区二区三区四区| 色8久久人人97超碰香蕉987| 欧美日韩一区二区欧美激情| 精品少妇一区二区三区在线视频| 久久久久久久综合色一本| 国产美女视频一区| 午夜天堂影视香蕉久久| 91麻豆国产自产在线观看| 精久久久久久久久久久| 成人永久免费视频| 日本久久精品电影| 欧美videofree性高清杂交| 欧美激情一区二区三区四区| ㊣最新国产の精品bt伙计久久| 一区二区三区四区在线免费观看 | 久久久www成人免费无遮挡大片| 国产午夜精品一区二区三区嫩草 | 成人动漫中文字幕| 91福利视频网站| 日韩一区二区免费视频| 国产精品白丝在线| 青草av.久久免费一区| 成人免费视频播放| 欧美精品vⅰdeose4hd| 久久精品水蜜桃av综合天堂| 亚洲免费观看高清| 日韩精品中午字幕| 欧美性色欧美a在线播放| 99九九99九九九视频精品| 成人免费视频播放| 91精品国产高清一区二区三区蜜臀| 久久综合国产精品| 亚洲一区二区三区在线| 国产成人8x视频一区二区| 欧美日韩免费一区二区三区视频| 久久久久久久电影| 婷婷综合五月天| 99精品1区2区| 精品国产一区二区三区忘忧草| 一区二区三区四区在线免费观看| 国产在线不卡视频| 欧美另类高清zo欧美| 国产精品久久久久久久久搜平片| 免费人成黄页网站在线一区二区| 色噜噜夜夜夜综合网| 久久久午夜精品理论片中文字幕| 午夜视频一区二区| 一本色道a无线码一区v| 欧美国产日韩在线观看| 久久精品久久综合| 欧美美女视频在线观看| 一区二区三区色| 99麻豆久久久国产精品免费优播| 久久伊人中文字幕| 欧美不卡一区二区| 中文字幕一区二区三区蜜月| 麻豆中文一区二区| 欧美日韩国产一级| 亚洲在线视频网站| 91美女视频网站| 国产精品剧情在线亚洲| 高清日韩电视剧大全免费| 精品日本一线二线三线不卡| 日韩中文字幕91| 欧美日本在线观看| 视频一区视频二区中文字幕| 欧美色精品在线视频| 亚洲人一二三区| 99在线视频精品| 最新不卡av在线| av一二三不卡影片| 国产精品久久久久影视| 国产 日韩 欧美大片| 狠狠色丁香婷婷综合| 精品国产网站在线观看| 久久国产精品72免费观看| 日韩精品一区二区三区视频 | 另类综合日韩欧美亚洲| 欧美日韩电影在线| 视频一区在线播放| 日韩一卡二卡三卡国产欧美| 欧美美女一区二区在线观看| 天天色图综合网| 91精品久久久久久久91蜜桃| 日韩成人精品在线| 精久久久久久久久久久| 日本道精品一区二区三区| 一区在线中文字幕| 91蜜桃视频在线| 午夜精品免费在线观看| 欧美一级日韩免费不卡| 久久99精品久久久久久国产越南| 精品国偷自产国产一区| 国产一区二区三区电影在线观看| 国产视频一区在线播放| 成人av在线网| 亚洲一区二区在线观看视频 | 欧美老肥妇做.爰bbww| 蜜臀va亚洲va欧美va天堂| 国产亚洲制服色| av在线一区二区三区| 亚洲一区在线观看视频| 欧美一区二区在线不卡| 国产露脸91国语对白| 国产精品久久久久久久久搜平片 | 性久久久久久久久| 欧美成人一区二区三区在线观看| 国产精品1区2区3区在线观看| 亚洲色图欧洲色图| 日韩一二三区不卡| 丁香婷婷综合激情五月色| 国产精品久久久久久久久图文区| 伊人色综合久久天天| 国产亚洲制服色| 五月天亚洲精品| 欧美一区二区三区白人| 国产成人综合网站| 亚洲综合色视频| 久久婷婷国产综合国色天香| 91国产精品成人| 精品无人码麻豆乱码1区2区 | 中文字幕精品—区二区四季| 日本韩国一区二区三区视频| 美国毛片一区二区| 亚洲色图色小说| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日韩午夜在线观看视频| 不卡av在线免费观看| 免费观看日韩电影| 亚洲女性喷水在线观看一区| 亚洲精品在线一区二区| 国产精品乱码一区二三区小蝌蚪| 欧美日韩精品一区二区三区蜜桃| 国产91综合网| 日本大胆欧美人术艺术动态| 中文字幕一区二区三中文字幕| 91精品国产综合久久精品麻豆 | 日韩精品一区二区三区四区| 日韩 欧美一区二区三区| 国产精品青草综合久久久久99| 欧美精品色综合| av在线这里只有精品|