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

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

?? morph.cpp

?? vc++數字圖像處理 ,是一本很不錯的介紹數字圖像方面的書籍,這里有本書的全部源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ************************************************************************//  文件名:morph.cpp////  圖像形態學變換API函數庫:////  ErosionDIB()    - 圖像腐蝕//  DilationDIB()	- 圖像膨脹//  OpenDIB()		- 圖像開運算//  CloseDIB()		- 圖像閉運算//  ThiningDIB()	- 圖像細化//// ************************************************************************#include "stdafx.h"#include "morph.h"#include "DIBAPI.h"#include <math.h>#include <direct.h>/************************************************************************* * * 函數名稱: *   ErosiontionDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數) *   LONG  lHeight      - 源圖像高度(象素數) *   int   nMode		- 腐蝕方式,0表示水平方向,1表示垂直方向,2表示自定義結構元素。 *	 int   structure[3][3]						- 自定義的3×3結構元素。 * * 返回值: *   BOOL               - 腐蝕成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對圖像進行腐蝕運算。結構元素為水平方向或垂直方向的三個點,中間點位于原點; * 或者由用戶自己定義3×3的結構元素。 *  * 要求目標圖像為只有0和255兩個灰度值的灰度圖像。 ************************************************************************/BOOL WINAPI ErosionDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, int nMode , int structure[3][3]){		// 指向源圖像的指針	LPSTR	lpSrc;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//循環變量	long i;	long j;	int  n;	int  m;	//像素值	unsigned char pixel;	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	if(nMode == 0)	{		//使用水平方向的結構元素進行腐蝕		for(j = 0; j <lHeight; j++)		{			for(i = 1;i <lWidth-1; i++)			{				//由于使用1×3的結構元素,為防止越界,所以不處理最左邊和最右邊的兩列像素				// 指向源圖像倒數第j行,第i個象素的指針							lpSrc = (char *)lpDIBBits + lWidth * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針							lpDst = (char *)lpNewDIBBits + lWidth * j + i;				//取得當前指針處的像素值,注意要轉換為unsigned char型				pixel = (unsigned char)*lpSrc;				//目標圖像中含有0和255外的其它灰度值				if(pixel != 255 && *lpSrc != 0)					return FALSE;								//目標圖像中的當前點先賦成黑色				*lpDst = (unsigned char)0;				//如果源圖像中當前點自身或者左右有一個點不是黑色,				//則將目標圖像中的當前點賦成白色				for (n = 0;n < 3;n++ )				{					pixel = *(lpSrc+n-1);					if (pixel == 255 )					{						*lpDst = (unsigned char)255;						break;					}				}							}		}	}	else if(nMode == 1)	{		//使用垂直方向的結構元素進行腐蝕		for(j = 1; j <lHeight-1; j++)		{			for(i = 0;i <lWidth; i++)			{				//由于使用1×3的結構元素,為防止越界,所以不處理最上邊和最下邊的兩列像素				// 指向源圖像倒數第j行,第i個象素的指針							lpSrc = (char *)lpDIBBits + lWidth * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針							lpDst = (char *)lpNewDIBBits + lWidth * j + i;				//取得當前指針處的像素值,注意要轉換為unsigned char型				pixel = (unsigned char)*lpSrc;				//目標圖像中含有0和255外的其它灰度值				if(pixel != 255 && *lpSrc != 0)					return FALSE;				//目標圖像中的當前點先賦成黑色				*lpDst = (unsigned char)0;				//如果源圖像中當前點自身或者上下有一個點不是黑色,				//則將目標圖像中的當前點賦成白色				for (n = 0;n < 3;n++ )				{					pixel = *(lpSrc+(n-1)*lWidth);					if (pixel == 255 )					{						*lpDst = (unsigned char)255;						break;					}				}							}		}	}	else	{		//使用自定義的結構元素進行腐蝕		for(j = 1; j <lHeight-1; j++)		{			for(i = 0;i <lWidth; i++)			{				//由于使用3×3的結構元素,為防止越界,所以不處理最左邊和最右邊的兩列像素				//和最上邊和最下邊的兩列像素				// 指向源圖像倒數第j行,第i個象素的指針							lpSrc = (char *)lpDIBBits + lWidth * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針							lpDst = (char *)lpNewDIBBits + lWidth * j + i;				//取得當前指針處的像素值,注意要轉換為unsigned char型				pixel = (unsigned char)*lpSrc;				//目標圖像中含有0和255外的其它灰度值				if(pixel != 255 && *lpSrc != 0)					return FALSE;				//目標圖像中的當前點先賦成黑色				*lpDst = (unsigned char)0;				//如果原圖像中對應結構元素中為黑色的那些點中有一個不是黑色,				//則將目標圖像中的當前點賦成白色				//注意在DIB圖像中內容是上下倒置的				for (m = 0;m < 3;m++ )				{					for (n = 0;n < 3;n++)					{						if( structure[m][n] == -1)							continue;						pixel = *(lpSrc + ((2-m)-1)*lWidth + (n-1));						if (pixel == 255 )						{								*lpDst = (unsigned char)255;							break;						}					}				}							}		}	}	// 復制腐蝕后的圖像	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   DilationDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數) *   LONG  lHeight      - 源圖像高度(象素數) *   int   nMode		- 膨脹方式,0表示水平方向,1表示垂直方向,2表示自定義結構元素。 *	 int   structure[3][3]						- 自定義的3×3結構元素。 * * 返回值: *   BOOL               - 膨脹成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對圖像進行膨脹運算。結構元素為水平方向或垂直方向的三個點,中間點位于原點; * 或者由用戶自己定義3×3的結構元素。 *  * 要求目標圖像為只有0和255兩個灰度值的灰度圖像。 ************************************************************************/BOOL WINAPI DilationDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, int nMode , int structure[3][3]){		// 指向源圖像的指針	LPSTR	lpSrc;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//循環變量	long i;	long j;	int  n;	int  m;	//像素值	unsigned char pixel;	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	if(nMode == 0)	{		//使用水平方向的結構元素進行膨脹		for(j = 0; j <lHeight; j++)		{			for(i = 1;i <lWidth-1; i++)			{				//由于使用1×3的結構元素,為防止越界,所以不處理最左邊和最右邊的兩列像素				// 指向源圖像倒數第j行,第i個象素的指針							lpSrc = (char *)lpDIBBits + lWidth * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針							lpDst = (char *)lpNewDIBBits + lWidth * j + i;				//取得當前指針處的像素值,注意要轉換為unsigned char型				pixel = (unsigned char)*lpSrc;				//目標圖像中含有0和255外的其它灰度值				if(pixel != 255 && pixel != 0)					return FALSE;								//目標圖像中的當前點先賦成白色				*lpDst = (unsigned char)255;				//源圖像中當前點自身或者左右只要有一個點是黑色,				//則將目標圖像中的當前點賦成黑色				for (n = 0;n < 3;n++ )				{					pixel = *(lpSrc+n-1);					if (pixel == 0 )					{						*lpDst = (unsigned char)0;						break;					}				}							}		}	}	else if(nMode == 1)	{		//使用垂直方向的結構元素進行膨脹		for(j = 1; j <lHeight-1; j++)		{			for(i = 0;i <lWidth; i++)			{				//由于使用1×3的結構元素,為防止越界,所以不處理最上邊和最下邊的兩列像素				// 指向源圖像倒數第j行,第i個象素的指針							lpSrc = (char *)lpDIBBits + lWidth * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針							lpDst = (char *)lpNewDIBBits + lWidth * j + i;				//取得當前指針處的像素值,注意要轉換為unsigned char型				pixel = (unsigned char)*lpSrc;				//目標圖像中含有0和255外的其它灰度值				if(pixel != 255 && *lpSrc != 0)					return FALSE;				//目標圖像中的當前點先賦成白色				*lpDst = (unsigned char)255;				//源圖像中當前點自身或者上下只要有一個點是黑色,				//則將目標圖像中的當前點賦成黑色				for (n = 0;n < 3;n++ )				{					pixel = *(lpSrc+(n-1)*lWidth);					if (pixel == 0 )					{						*lpDst = (unsigned char)0;						break;					}				}							}		}	}	else	{		//使用自定義的結構元素進行膨脹		for(j = 1; j <lHeight-1; j++)		{			for(i = 0;i <lWidth; i++)			{				//由于使用3×3的結構元素,為防止越界,所以不處理最左邊和最右邊的兩列像素				//和最上邊和最下邊的兩列像素				// 指向源圖像倒數第j行,第i個象素的指針							lpSrc = (char *)lpDIBBits + lWidth * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針							lpDst = (char *)lpNewDIBBits + lWidth * j + i;				//取得當前指針處的像素值,注意要轉換為unsigned char型				pixel = (unsigned char)*lpSrc;				//目標圖像中含有0和255外的其它灰度值				if(pixel != 255 && *lpSrc != 0)					return FALSE;				//目標圖像中的當前點先賦成白色				*lpDst = (unsigned char)255;				//原圖像中對應結構元素中為黑色的那些點中只要有一個是黑色,				//則將目標圖像中的當前點賦成黑色				//注意在DIB圖像中內容是上下倒置的				for (m = 0;m < 3;m++ )				{					for (n = 0;n < 3;n++)					{						if( structure[m][n] == -1)							continue;						pixel = *(lpSrc + ((2-m)-1)*lWidth + (n-1));						if (pixel == 0 )						{								*lpDst = (unsigned char)0;							break;						}					}				}							}		}	}	// 復制膨脹后的圖像	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	// 返回	return TRUE;}/************************************************************************* * * 函數名稱: *   OpenDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數) *   LONG  lHeight      - 源圖像高度(象素數) *   int   nMode		- 開運算方式,0表示水平方向,1表示垂直方向,2表示自定義結構元素。 *	 int   structure[3][3]						- 自定義的3×3結構元素。 * * 返回值: *   BOOL               - 開運算成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對圖像進行開運算。結構元素為水平方向或垂直方向的三個點,中間點位于原點; * 或者由用戶自己定義3×3的結構元素。 *  * 要求目標圖像為只有0和255兩個灰度值的灰度圖像。 ************************************************************************/BOOL WINAPI OpenDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, int nMode , int structure[3][3]){		// 指向源圖像的指針	LPSTR	lpSrc;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//循環變量	long i;	long j;	int  n;	int  m;	//像素值	unsigned char pixel;	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	if(nMode == 0)	{		//使用水平方向的結構元素進行腐蝕		for(j = 0; j <lHeight; j++)		{			for(i = 1;i <lWidth-1; i++)			{				//由于使用1×3的結構元素,為防止越界,所以不處理最左邊和最右邊的兩列像素				// 指向源圖像倒數第j行,第i個象素的指針							lpSrc = (char *)lpDIBBits + lWidth * j + i;				// 指向目標圖像倒數第j行,第i個象素的指針							lpDst = (char *)lpNewDIBBits + lWidth * j + i;				//取得當前指針處的像素值,注意要轉換為unsigned char型				pixel = (unsigned char)*lpSrc;				//目標圖像中含有0和255外的其它灰度值				if(pixel != 255 && *lpSrc != 0)					return FALSE;								//目標圖像中的當前點先賦成黑色				*lpDst = (unsigned char)0;				//如果源圖像中當前點自身或者左右有一個點不是黑色,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区播放| bt7086福利一区国产| 色噜噜久久综合| 日韩一区在线播放| 99视频热这里只有精品免费| 欧美国产禁国产网站cc| 成人av在线电影| 亚洲精品国产无天堂网2021 | 亚洲日本va午夜在线电影| 国产精品久久毛片a| 成人免费视频一区| 蓝色福利精品导航| 欧美刺激午夜性久久久久久久| 美洲天堂一区二卡三卡四卡视频| 日韩精品成人一区二区三区| 午夜激情综合网| 欧美狂野另类xxxxoooo| 欧美综合在线视频| 在线不卡的av| 日韩一级片在线观看| 日本一区二区动态图| 五月激情综合色| 99精品国产视频| 亚洲视频网在线直播| 99久久精品国产一区二区三区 | 在线观看国产精品网站| 亚洲免费观看高清完整版在线观看| 日本在线播放一区二区三区| 欧美丰满一区二区免费视频| 五月婷婷久久丁香| 日韩欧美一级二级三级| 国产成人精品一区二区三区四区| 国产精品久久久久久久久免费桃花 | 亚洲国产高清aⅴ视频| 国产三区在线成人av| 日日夜夜精品视频免费| 欧美精品一二三| 亚洲3atv精品一区二区三区| 精品剧情在线观看| 91高清视频在线| 国产做a爰片久久毛片| 亚洲免费观看在线视频| 欧美一区二区三区性视频| 国产综合久久久久久鬼色| 亚洲精品自拍动漫在线| 精品国产免费人成在线观看| 色婷婷国产精品久久包臀| 国产原创一区二区三区| 午夜视频一区二区三区| 国产精品色哟哟| 欧美成人一级视频| 一本一本久久a久久精品综合麻豆| 麻豆精品一二三| 亚洲一区影音先锋| 国产精品视频第一区| 日韩视频免费观看高清完整版在线观看 | 亚洲婷婷综合久久一本伊一区| 88在线观看91蜜桃国自产| 成人激情免费视频| 精品一区二区三区av| 丝袜美腿一区二区三区| 亚洲麻豆国产自偷在线| 国产日韩精品一区二区三区在线| 欧美一区二区免费观在线| 在线精品视频免费观看| 99在线精品免费| 国产精品伊人色| 蜜芽一区二区三区| 制服丝袜中文字幕亚洲| 天天综合色天天| 亚洲激情一二三区| 国产精品高清亚洲| 国产欧美精品在线观看| www国产精品av| 2017欧美狠狠色| 日韩午夜在线观看视频| 欧美二区乱c少妇| 欧美人与z0zoxxxx视频| 欧美日韩亚洲国产综合| 欧美四级电影在线观看| 欧美亚洲高清一区| 在线欧美日韩国产| 91一区二区三区在线播放| 99精品久久久久久| 色999日韩国产欧美一区二区| 一本久久综合亚洲鲁鲁五月天| 99re成人精品视频| 日本电影欧美片| 色欧美乱欧美15图片| 色综合久久久久综合体桃花网| 99久久99久久精品国产片果冻| 99久久精品国产毛片| 91啪在线观看| 欧美日韩视频在线观看一区二区三区 | 国产欧美一二三区| 久久久久久毛片| 日本一区二区成人| 亚洲综合精品久久| 午夜伦欧美伦电影理论片| 老汉av免费一区二区三区| 国产精品白丝av| a4yy欧美一区二区三区| 在线视频你懂得一区二区三区| 欧美日韩精品欧美日韩精品 | 波多野结衣亚洲| 色欧美88888久久久久久影院| 欧美午夜片在线看| 日韩欧美一二区| 国产精品天干天干在观线| 亚洲男人电影天堂| 日日欢夜夜爽一区| 国内成人精品2018免费看| 国产成人丝袜美腿| av一本久道久久综合久久鬼色| 91蜜桃在线免费视频| 欧美区一区二区三区| 91精品国产综合久久精品app| 日韩精品在线看片z| 国产欧美精品一区二区色综合| 亚洲女同一区二区| 美女www一区二区| 成人黄色免费短视频| 欧美日韩高清一区二区不卡 | 国产欧美日本一区二区三区| 综合精品久久久| 青青草国产成人99久久| 成人a级免费电影| 欧美日韩精品一区二区三区蜜桃| 精品国产髙清在线看国产毛片| 成人欧美一区二区三区| 青青草精品视频| 在线观看成人小视频| 精品噜噜噜噜久久久久久久久试看| 国产精品久久久99| 天天色天天操综合| 成人美女视频在线看| 日韩午夜在线影院| 亚洲国产日韩一级| 成人视屏免费看| 日韩一区二区三区观看| 亚洲视频在线观看一区| 国内精品久久久久影院一蜜桃| 中文字幕精品一区二区三区精品| 在线观看av一区| 正在播放一区二区| 亚洲精品一二三四区| 欧美一级片在线观看| 成年人网站91| www.亚洲人| 99视频精品在线| 亚洲18色成人| 91丝袜美腿高跟国产极品老师| 国产日韩欧美麻豆| 在线精品视频一区二区三四| 久久国产三级精品| 国产亚洲欧美日韩日本| 在线观看亚洲成人| 国产在线播放一区三区四| 91亚洲永久精品| 亚洲综合在线视频| 国产精品一级片在线观看| 91免费在线播放| 日韩中文字幕av电影| 日韩欧美一级特黄在线播放| 精品99久久久久久| 欧美电影免费观看完整版| 欧美色爱综合网| 91免费观看国产| 激情深爱一区二区| 天堂在线一区二区| 毛片av一区二区| 成人性生交大合| 一本色道久久加勒比精品| 欧美不卡在线视频| 亚洲欧洲日产国产综合网| 亚洲影院免费观看| 国产高清一区日本| 91福利在线看| 欧美va亚洲va| 亚洲综合色区另类av| 激情伊人五月天久久综合| 色呦呦一区二区三区| 欧美一区二区三区在线观看 | 国产精品欧美一区喷水| 在线观看一区日韩| 激情综合五月婷婷| 国产盗摄精品一区二区三区在线 | 午夜精品久久久久久久久久| 亚洲欧美日韩一区| 亚洲免费在线播放| 亚洲综合一区二区| 欧美国产综合一区二区| 综合亚洲深深色噜噜狠狠网站| 日本一区中文字幕| 337p日本欧洲亚洲大胆精品 | 免费人成精品欧美精品| 欧美成人精精品一区二区频| 国产一区二区看久久| 中文字幕免费在线观看视频一区| 99久久精品一区|