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

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

?? morph.cpp

?? vc++數字圖像處理 ,是一本很不錯的介紹數字圖像方面的書籍,這里有本書的全部源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
				//則將目標圖像中的當前點賦成白色				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);	// 重新初始化新分配的內存,設定初始值為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)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;}/************************************************************************* * * 函數名稱: *   CloseDIB() * * 參數: *   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兩個灰度值的灰度圖像。 ************************************************************************//************************************************************************* * * 函數名稱: *   ThinDIB() * * 參數: *   LPSTR lpDIBBits    - 指向源DIB圖像指針 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數) *   LONG  lHeight      - 源圖像高度(象素數) * * 返回值: *   BOOL               - 閉運算成功返回TRUE,否則返回FALSE。 * * 說明: * 該函數用于對圖像進行細化運算。 *  * 要求目標圖像為只有0和255兩個灰度值的灰度圖像。 ************************************************************************/BOOL WINAPI CloseDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, int nMode , int structure[3][3]){		if (DilationDIB(lpDIBBits, lWidth, lHeight, nMode , structure))		{			if (ErosionDIB(lpDIBBits, lWidth, lHeight, nMode , structure))			{				// 返回				return TRUE;			}		}		return FALSE;		// 返回	return TRUE;}BOOL WINAPI ThiningDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight){		// 指向源圖像的指針	LPSTR	lpSrc;		// 指向緩存圖像的指針	LPSTR	lpDst;		// 指向緩存DIB圖像的指針	LPSTR	lpNewDIBBits;	HLOCAL	hNewDIBBits;	//臟標記	BOOL bModified;	//循環變量	long i;	long j;	int  n;	int  m;	//四個條件	BOOL bCondition1;	BOOL bCondition2;	BOOL bCondition3;	BOOL bCondition4;	//計數器	unsigned char nCount;		//像素值	unsigned char pixel;	//5×5相鄰區域像素值	unsigned char neighbour[5][5];	// 暫時分配內存,以保存新圖像	hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);	if (hNewDIBBits == NULL)	{		// 分配內存失敗		return FALSE;	}		// 鎖定內存	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);	// 初始化新分配的內存,設定初始值為255	lpDst = (char *)lpNewDIBBits;	memset(lpDst, (BYTE)255, lWidth * lHeight);	bModified=TRUE;	while(bModified)	{		bModified = FALSE;		// 初始化新分配的內存,設定初始值為255		lpDst = (char *)lpNewDIBBits;		memset(lpDst, (BYTE)255, lWidth * lHeight);		for(j = 2; j <lHeight-2; j++)		{			for(i = 2;i <lWidth-2; i++)			{				bCondition1 = FALSE;				bCondition2 = FALSE;				bCondition3 = FALSE;				bCondition4 = FALSE;				//由于使用5×5的結構元素,為防止越界,所以不處理外圍的幾行和幾列像素				// 指向源圖像倒數第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;					continue;				//如果源圖像中當前點為白色,則跳過				else if(pixel == 255)					continue;				//獲得當前點相鄰的5×5區域內像素值,白色用0代表,黑色用1代表				for (m = 0;m < 5;m++ )				{					for (n = 0;n < 5;n++)					{						neighbour[m][n] =(255 - (unsigned char)*(lpSrc + ((4 - m) - 2)*lWidth + n - 2 )) / 255;					}				}//				neighbour[][]				//逐個判斷條件。				//判斷2<=NZ(P1)<=6				nCount =  neighbour[1][1] + neighbour[1][2] + neighbour[1][3] \						+ neighbour[2][1] + neighbour[2][3] + \						+ neighbour[3][1] + neighbour[3][2] + neighbour[3][3];				if ( nCount >= 2 && nCount <=6)					bCondition1 = TRUE;				//判斷Z0(P1)=1				nCount = 0;				if (neighbour[1][2] == 0 && neighbour[1][1] == 1)					nCount++;				if (neighbour[1][1] == 0 && neighbour[2][1] == 1)					nCount++;				if (neighbour[2][1] == 0 && neighbour[3][1] == 1)					nCount++;				if (neighbour[3][1] == 0 && neighbour[3][2] == 1)					nCount++;				if (neighbour[3][2] == 0 && neighbour[3][3] == 1)					nCount++;				if (neighbour[3][3] == 0 && neighbour[2][3] == 1)					nCount++;				if (neighbour[2][3] == 0 && neighbour[1][3] == 1)					nCount++;				if (neighbour[1][3] == 0 && neighbour[1][2] == 1)					nCount++;				if (nCount == 1)					bCondition2 = TRUE;				//判斷P2*P4*P8=0 or Z0(p2)!=1				if (neighbour[1][2]*neighbour[2][1]*neighbour[2][3] == 0)					bCondition3 = TRUE;				else				{					nCount = 0;					if (neighbour[0][2] == 0 && neighbour[0][1] == 1)						nCount++;					if (neighbour[0][1] == 0 && neighbour[1][1] == 1)						nCount++;					if (neighbour[1][1] == 0 && neighbour[2][1] == 1)						nCount++;					if (neighbour[2][1] == 0 && neighbour[2][2] == 1)						nCount++;					if (neighbour[2][2] == 0 && neighbour[2][3] == 1)						nCount++;					if (neighbour[2][3] == 0 && neighbour[1][3] == 1)						nCount++;					if (neighbour[1][3] == 0 && neighbour[0][3] == 1)						nCount++;					if (neighbour[0][3] == 0 && neighbour[0][2] == 1)						nCount++;					if (nCount != 1)						bCondition3 = TRUE;				}				//判斷P2*P4*P6=0 or Z0(p4)!=1				if (neighbour[1][2]*neighbour[2][1]*neighbour[3][2] == 0)					bCondition4 = TRUE;				else				{					nCount = 0;					if (neighbour[1][1] == 0 && neighbour[1][0] == 1)						nCount++;					if (neighbour[1][0] == 0 && neighbour[2][0] == 1)						nCount++;					if (neighbour[2][0] == 0 && neighbour[3][0] == 1)						nCount++;					if (neighbour[3][0] == 0 && neighbour[3][1] == 1)						nCount++;					if (neighbour[3][1] == 0 && neighbour[3][2] == 1)						nCount++;					if (neighbour[3][2] == 0 && neighbour[2][2] == 1)						nCount++;					if (neighbour[2][2] == 0 && neighbour[1][2] == 1)						nCount++;					if (neighbour[1][2] == 0 && neighbour[1][1] == 1)						nCount++;					if (nCount != 1)						bCondition4 = TRUE;				}				if(bCondition1 && bCondition2 && bCondition3 && bCondition4)				{					*lpDst = (unsigned char)255;					bModified = TRUE;				}				else				{					*lpDst = (unsigned char)0;				}			}		}			// 復制腐蝕后的圖像			memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	}	// 復制腐蝕后的圖像	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);	// 釋放內存	LocalUnlock(hNewDIBBits);	LocalFree(hNewDIBBits);	// 返回	return TRUE;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类色综合网站| 亚洲天堂福利av| 东方欧美亚洲色图在线| 五月综合激情网| 一区二区三区在线观看动漫| 中文字幕亚洲一区二区av在线| 国产色产综合产在线视频| 精品人在线二区三区| 欧美伊人久久久久久久久影院 | 一区二区三区日韩欧美| 国产精品一色哟哟哟| 日韩avvvv在线播放| 日韩国产成人精品| 一本久久a久久免费精品不卡| 色婷婷综合久久久久中文 | 国产精品一区二区免费不卡| 欧美三日本三级三级在线播放| 欧美精品国产精品| 91精品在线观看入口| 日韩三级视频中文字幕| 久久尤物电影视频在线观看| 久久久久97国产精华液好用吗| 欧美国产一区在线| 亚洲精品国产无天堂网2021| 成人小视频免费在线观看| 91成人网在线| 精品入口麻豆88视频| 亚洲成人黄色小说| 国产呦精品一区二区三区网站| 国产麻豆精品久久一二三| 日韩一区二区在线观看视频| 美女性感视频久久| 不卡av在线网| 欧美电影一区二区| 日韩影院免费视频| 成人av午夜影院| 亚洲欧洲日产国码二区| 99久久婷婷国产综合精品| 日韩美女主播在线视频一区二区三区| 国产欧美一区二区精品忘忧草| 亚洲综合久久久| 国产91丝袜在线观看| 国产偷国产偷亚洲高清人白洁| 国产美女精品在线| 国产精品免费aⅴ片在线观看| 日韩激情视频在线观看| 91精品久久久久久久91蜜桃| 经典一区二区三区| 欧美视频自拍偷拍| 日韩高清一级片| 久久久久久久综合色一本| 国产.欧美.日韩| 一区二区三区中文字幕精品精品| 欧洲亚洲精品在线| 亚洲乱码国产乱码精品精98午夜| 91麻豆自制传媒国产之光| 久久影院电视剧免费观看| 91在线精品秘密一区二区| 亚洲成va人在线观看| 久久婷婷国产综合精品青草| gogo大胆日本视频一区| 2024国产精品| 成人免费视频caoporn| 亚洲成人自拍网| 久久无码av三级| 91福利社在线观看| 国产一区二区三区国产| 依依成人综合视频| 精品国精品自拍自在线| 老司机一区二区| 日韩久久久精品| www.性欧美| 免费不卡在线观看| 在线不卡一区二区| 国产美女精品人人做人人爽| 中文字幕在线播放不卡一区| 91精品欧美一区二区三区综合在| 处破女av一区二区| 婷婷综合在线观看| 中文字幕中文字幕一区| 波多野结衣的一区二区三区| 日韩不卡一二三区| 日本一区二区免费在线观看视频| 欧美久久一二区| 99久久婷婷国产| 国产精品亚洲一区二区三区妖精| 亚洲成av人片在线观看| 亚洲少妇中出一区| 777精品伊人久久久久大香线蕉| 盗摄精品av一区二区三区| 免费看精品久久片| 一区二区三区欧美日| 国产日韩欧美精品一区| 日韩欧美激情四射| 欧美日韩精品一区二区天天拍小说 | 欧美日韩一区二区三区高清| 国产成人亚洲综合a∨婷婷| 国产精品国产精品国产专区不蜜 | 91免费看视频| 国产成人激情av| 黄色小说综合网站| 中文字幕在线观看一区二区| www国产精品av| 欧美mv日韩mv亚洲| 日韩小视频在线观看专区| 欧美日韩亚洲综合一区| 91美女片黄在线观看| 国产91在线观看| 高清成人在线观看| 国产精品一区二区男女羞羞无遮挡| 美日韩黄色大片| 美脚の诱脚舐め脚责91 | 国产不卡免费视频| 久久99精品久久久久久| 久久精品国产亚洲a| 美日韩一区二区| 精品综合免费视频观看| 麻豆精品一区二区综合av| 婷婷久久综合九色国产成人| 五月婷婷激情综合| 日韩av成人高清| 黄页视频在线91| 成人久久视频在线观看| 99久久精品国产网站| 欧洲一区在线观看| 欧美女孩性生活视频| 在线综合亚洲欧美在线视频| 欧美一级午夜免费电影| av一区二区三区黑人| youjizz国产精品| 99re热这里只有精品免费视频| 色综合视频一区二区三区高清| 91女人视频在线观看| 欧美视频你懂的| 7777精品伊人久久久大香线蕉| 欧美一区二区三区男人的天堂| 日韩欧美国产一区二区三区| 2023国产精品| 亚洲人精品一区| 欧美韩日一区二区三区| 国产精品国产自产拍高清av王其| 一区二区三区四区高清精品免费观看 | 国产一区不卡视频| 粉嫩av一区二区三区| 欧美在线短视频| 亚洲精品一区二区三区四区高清 | 久久精子c满五个校花| 中文字幕日韩一区| 视频一区二区中文字幕| 久久精品99国产国产精| 成人午夜电影小说| 欧美日韩国产另类一区| 欧美精品一区二区三区在线播放| 亚洲丝袜另类动漫二区| 日韩有码一区二区三区| av在线综合网| 精品国产91洋老外米糕| 亚洲乱码国产乱码精品精98午夜 | 奇米在线7777在线精品| 成人综合在线视频| 欧美一级生活片| 亚洲欧洲成人精品av97| 久久精品噜噜噜成人av农村| 91一区在线观看| 久久亚洲欧美国产精品乐播| 亚洲一区二区三区四区在线观看| 国产一二三精品| 91精品国产色综合久久ai换脸 | 亚洲欧美韩国综合色| 日产国产高清一区二区三区| 成人黄色电影在线| 精品久久久久久无| 亚洲.国产.中文慕字在线| av午夜精品一区二区三区| 日韩三级视频在线看| 亚洲成av人影院| 在线观看网站黄不卡| 成人免费在线播放视频| 国产高清亚洲一区| 欧美成人video| 日韩**一区毛片| 欧美日韩黄色影视| 一区二区三区在线免费| 成人激情图片网| 国产人妖乱国产精品人妖| 久久99精品国产91久久来源| 91精品国产欧美一区二区18| 亚洲一区二区五区| 欧美亚洲图片小说| 亚洲摸摸操操av| 99国产麻豆精品| 国产精品久久久久aaaa樱花 | 欧美激情综合五月色丁香| 国产自产视频一区二区三区| 精品日韩在线观看| 激情亚洲综合在线| 精品少妇一区二区三区视频免付费 | 久久婷婷成人综合色| 久久99精品久久久久婷婷| 日韩美女在线视频|