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

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

?? edgecontour.cpp

?? 汽車牌照的自動定位和識別程序源代碼
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
			//目標圖像中含有0和255外的其它灰度值
			if(pixel != 255 && pixel != 0)
				return FALSE;
		}

		//判斷上面的點,如果為白,則壓入堆棧
		//注意防止越界
		if(iCurrentPixely < lHeight - 1)
		{
			lpSrc = (char *)lpDIBBits + lWidth * (iCurrentPixely + 1) + iCurrentPixelx;
			//取得當前指針處的像素值,注意要轉換為unsigned char型
			pixel = (unsigned char)*lpSrc;
			if (pixel == 255)
			{
				StackPoint++;
				Seeds[StackPoint].Height = iCurrentPixely + 1;
				Seeds[StackPoint].Width = iCurrentPixelx;
			}
			//目標圖像中含有0和255外的其它灰度值
			if(pixel != 255 && pixel != 0)
				return FALSE;
		}

		//判斷右面的點,如果為白,則壓入堆棧
		//注意防止越界
		if(iCurrentPixelx < lWidth - 1)
		{
			lpSrc = (char *)lpDIBBits + lWidth * iCurrentPixely + iCurrentPixelx + 1;
			//取得當前指針處的像素值,注意要轉換為unsigned char型
			pixel = (unsigned char)*lpSrc;
			if (pixel == 255)
			{
				StackPoint++;
				Seeds[StackPoint].Height = iCurrentPixely;
				Seeds[StackPoint].Width = iCurrentPixelx + 1;
			}
			//目標圖像中含有0和255外的其它灰度值
			if(pixel != 255 && pixel != 0)
				return FALSE;
		}

		//判斷下面的點,如果為白,則壓入堆棧
		//注意防止越界
		if(iCurrentPixely > 0)
		{
			lpSrc = (char *)lpDIBBits + lWidth * (iCurrentPixely - 1) + iCurrentPixelx;
			//取得當前指針處的像素值,注意要轉換為unsigned char型
			pixel = (unsigned char)*lpSrc;
			if (pixel == 255)
			{
				StackPoint++;
				Seeds[StackPoint].Height = iCurrentPixely - 1;
				Seeds[StackPoint].Width = iCurrentPixelx;
			}
			//目標圖像中含有0和255外的其它灰度值
			if(pixel != 255 && pixel != 0)
				return FALSE;
		}
	}

	//釋放堆棧
	delete Seeds;
	// 返回
	return TRUE;
}

/*************************************************************************
 *
 * 函數名稱:
 *   ContourDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 * 返回值:
 *   BOOL               - 運算成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 * 該函數用于對圖像進行輪廓提取運算。
 * 
 * 要求目標圖像為只有0和255兩個灰度值的灰度圖像。
 ************************************************************************/

BOOL WINAPI ContourDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向源圖像的指針
	LPSTR	lpSrc;
	
	// 指向緩存圖像的指針
	LPSTR	lpDst;
	
	// 指向緩存DIB圖像的指針
	LPSTR	lpNewDIBBits;
	HLOCAL	hNewDIBBits;

	//循環變量
	long i;
	long j;
	unsigned char n,e,s,w,ne,se,nw,sw;

	//像素值
	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);
	for(j = 1; j <lHeight-1; j++)
	{
		for(i = 1;i <lWidth-1; i++)
		{
			
			// 指向源圖像倒數第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;
			if(pixel == 0)
			{
				*lpDst = (unsigned char)0;
				nw = (unsigned char)*(lpSrc + lWidth -1);
				n  = (unsigned char)*(lpSrc + lWidth );
				ne = (unsigned char)*(lpSrc + lWidth +1);
				w = (unsigned char)*(lpSrc -1);
				e = (unsigned char)*(lpSrc +1);
				sw = (unsigned char)*(lpSrc - lWidth -1);
				s  = (unsigned char)*(lpSrc - lWidth );
				se = (unsigned char)*(lpSrc - lWidth +1);
				//如果相鄰的八個點都是黑點
				if(nw+n+ne+w+e+sw+s+se==0)
				{
					*lpDst = (unsigned char)255;
				}
			}
		}
	}

	// 復制腐蝕后的圖像
	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

	// 釋放內存
	LocalUnlock(hNewDIBBits);
	LocalFree(hNewDIBBits);

	// 返回
	return TRUE;
}

/*************************************************************************
 *
 * 函數名稱:
 *   TraceDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 * 返回值:
 *   BOOL               - 運算成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 * 該函數用于對圖像進行輪廓跟蹤運算。
 * 
 * 要求目標圖像為只有0和255兩個灰度值的灰度圖像。
 ************************************************************************/

BOOL WINAPI TraceDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向源圖像的指針
	LPSTR	lpSrc;
	
	// 指向緩存圖像的指針
	LPSTR	lpDst;
	
	// 指向緩存DIB圖像的指針
	LPSTR	lpNewDIBBits;
	HLOCAL	hNewDIBBits;

	// 圖像每行的字節數
	LONG lLineBytes;
	
	//循環變量
	long i;
	long j;

	//像素值
	unsigned char pixel;

	//是否找到起始點及回到起始點
	bool bFindStartPoint;

	//是否掃描到一個邊界點
	bool bFindPoint;

	//起始邊界點與當前邊界點
	Point StartPoint,CurrentPoint;

	//八個方向和起始掃描方向
	int Direction[8][2]={{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}};
	int BeginDirect;

	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);

	// 暫時分配內存,以保存新圖像
	hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);

	if (hNewDIBBits == NULL)
	{
		// 分配內存失敗
		return FALSE;
	}
	
	// 鎖定內存
	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

	// 初始化新分配的內存,設定初始值為255
	lpDst = (char *)lpNewDIBBits;
	memset(lpDst, (BYTE)255, lLineBytes * lHeight);

	//先找到最左上方的邊界點
	bFindStartPoint = false;
	for (j = 0;j < lHeight && !bFindStartPoint;j++)
	{
		for(i = 0;i < lWidth && !bFindStartPoint;i++)
		{
			// 指向源圖像倒數第j行,第i個象素的指針			
			lpSrc = (char *)lpDIBBits + lLineBytes * j + i;
			
			//取得當前指針處的像素值,注意要轉換為unsigned char型
			pixel = (unsigned char)*lpSrc;
			
			if(pixel == 0)
			{
				bFindStartPoint = true;

				StartPoint.Height = j;
				StartPoint.Width = i;

				// 指向目標圖像倒數第j行,第i個象素的指針			
				lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;	
				*lpDst = (unsigned char)0;
			}		
		}
	}

	//由于起始點是在左下方,故起始掃描沿左上方向
	BeginDirect = 0;
	//跟蹤邊界
	bFindStartPoint = false;
	//從初始點開始掃描
	CurrentPoint.Height = StartPoint.Height;
	CurrentPoint.Width = StartPoint.Width;
	while(!bFindStartPoint)
	{
		bFindPoint = false;
		while(!bFindPoint)
		{
			//沿掃描方向查看一個像素
			lpSrc = (char *)lpDIBBits + lLineBytes * ( CurrentPoint.Height + Direction[BeginDirect][1])
				+ (CurrentPoint.Width + Direction[BeginDirect][0]);
			pixel = (unsigned char)*lpSrc;
			if(pixel == 0)
			{
				bFindPoint = true;
				CurrentPoint.Height = CurrentPoint.Height + Direction[BeginDirect][1];
				CurrentPoint.Width = CurrentPoint.Width + Direction[BeginDirect][0];
				if(CurrentPoint.Height == StartPoint.Height && CurrentPoint.Width == StartPoint.Width)
				{
					bFindStartPoint = true;
				}
				lpDst = (char *)lpNewDIBBits + lLineBytes * CurrentPoint.Height + CurrentPoint.Width;
				*lpDst = (unsigned char)0;
				//掃描的方向逆時針旋轉兩格
				BeginDirect--;
				if(BeginDirect == -1)
					BeginDirect = 7;
				BeginDirect--;
				if(BeginDirect == -1)
					BeginDirect = 7;
			}
			else
			{
				//掃描方向順時針旋轉一格
				BeginDirect++;
				if(BeginDirect == 8)
					BeginDirect = 0;

			}

		}
	}

	// 復制腐蝕后的圖像
	memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

	// 釋放內存
	LocalUnlock(hNewDIBBits);
	LocalFree(hNewDIBBits);

	// 返回
	return TRUE;
}

/*************************************************************************
 *
 * 函數名稱:
 *   MyDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 * 返回值:
 *   BOOL               - 邊緣檢測成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 * 該函數用水平邊緣檢測算子對圖像進行邊緣檢測運算。
 * 
 * 要求目標圖像為灰度圖像。
 ************************************************************************/

BOOL WINAPI MyDIB(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向緩存圖像的指針
	LPSTR	lpDst1;
	LPSTR	lpDst2;
	
	// 指向緩存DIB圖像的指針
	LPSTR	lpNewDIBBits1;
	HLOCAL	hNewDIBBits1;
	LPSTR	lpNewDIBBits2;
	HLOCAL	hNewDIBBits2;

	//循環變量
	long i;
	long j;

	// 模板高度
	int		iTempH;
	
	// 模板寬度
	int		iTempW;
	
	// 模板系數
	FLOAT	fTempC;
	
	// 模板中心元素X坐標
	int		iTempMX;
	
	// 模板中心元素Y坐標
	int		iTempMY;
	
	//模板數組
	FLOAT aTemplate[9];

	// 暫時分配內存,以保存新圖像
	hNewDIBBits1 = LocalAlloc(LHND, lWidth * lHeight);

	if (hNewDIBBits1 == NULL)
	{
		// 分配內存失敗
		return FALSE;
	}
	
	// 鎖定內存
	lpNewDIBBits1 = (char * )LocalLock(hNewDIBBits1);

	// 暫時分配內存,以保存新圖像
	hNewDIBBits2 = LocalAlloc(LHND, lWidth * lHeight);

	if (hNewDIBBits2 == NULL)
	{
		// 分配內存失敗
		return FALSE;
	}
	
	// 鎖定內存
	lpNewDIBBits2 = (char * )LocalLock(hNewDIBBits2);

	// 拷貝源圖像到緩存圖像中
	lpDst1 = (char *)lpNewDIBBits1;
	memcpy(lpNewDIBBits1, lpDIBBits, lWidth * lHeight);
	lpDst2 = (char *)lpNewDIBBits2;
	memcpy(lpNewDIBBits2, lpDIBBits, lWidth * lHeight);


	// 設置Prewitt模板參數
	iTempW = 3;
	iTempH = 3;
	fTempC = 1.0;
	iTempMX = 1;
	iTempMY = 1;
	aTemplate[0] = 0.0;
	aTemplate[1] = 0.0;
	aTemplate[2] = 0.0;
	aTemplate[3] = -1.0;
	aTemplate[4] = 1.0;
	aTemplate[5] = 0.0;
	aTemplate[6] = 0.0;
	aTemplate[7] = 0.0;
	aTemplate[8] = 0.0;

	// 調用Template()函數
	if (!Template(lpNewDIBBits1, lWidth, lHeight, 
		iTempH, iTempW, iTempMX, iTempMY, aTemplate, fTempC))
	{
		return FALSE;
	}

	// 設置Prewitt模板參數
	aTemplate[0] = 0.0;
	aTemplate[1] = -1.0;
	aTemplate[2] = 0.0;
	aTemplate[3] = 0.0;
	aTemplate[4] = 1.0;
	aTemplate[5] = 0.0;
	aTemplate[6] = 0.0;
	aTemplate[7] = 0.0;
	aTemplate[8] = 0.0;

	// 調用Template()函數
	if (!Template(lpNewDIBBits2, lWidth, lHeight, 
		iTempH, iTempW, iTempMX, iTempMY, aTemplate, fTempC))
	{
		return FALSE;
	}

	//求兩幅緩存圖像的最大值
	for(j = 0; j <lHeight; j++)
	{
		for(i = 0;i <lWidth-1; i++)
		{

			// 指向緩存圖像1倒數第j行,第i個象素的指針			
			lpDst1 = (char *)lpNewDIBBits1 + lWidth * j + i;

			// 指向緩存圖像2倒數第j行,第i個象素的指針			
			lpDst2 = (char *)lpNewDIBBits2 + lWidth * j + i;
			
			if(*lpDst2 > *lpDst1)
				*lpDst1 = *lpDst2;
		
		}
	}

	// 復制經過模板運算后的圖像到源圖像
	memcpy(lpDIBBits, lpNewDIBBits1, lWidth * lHeight);

	// 釋放內存
	LocalUnlock(hNewDIBBits1);
	LocalFree(hNewDIBBits1);

	LocalUnlock(hNewDIBBits2);
	LocalFree(hNewDIBBits2);
	// 返回
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃视频在线观看一区| gogogo免费视频观看亚洲一| 国产精品一级在线| 欧美午夜片在线看| 欧美国产精品劲爆| 日韩福利电影在线| 91麻豆免费看| 日本一二三四高清不卡| 午夜精彩视频在线观看不卡| 成人aa视频在线观看| 欧美一级片在线看| 午夜久久电影网| 99精品视频在线观看| 久久精品人人做人人综合 | 国产露脸91国语对白| 欧美色男人天堂| 性做久久久久久免费观看欧美| 成人小视频免费在线观看| 日韩欧美国产三级电影视频| 亚洲在线观看免费视频| 99精品一区二区三区| 国产精品美女久久福利网站| 国内久久精品视频| 日韩三级精品电影久久久| 亚洲国产精品视频| 欧美午夜精品一区二区蜜桃| 亚洲啪啪综合av一区二区三区| 国产精品亚洲а∨天堂免在线| 精品国免费一区二区三区| 日本欧美一区二区三区乱码| 欧美日韩成人在线一区| 亚洲一区二区三区四区中文字幕| 色婷婷久久久久swag精品| 亚洲视频每日更新| 99久免费精品视频在线观看| 国产精品不卡在线观看| av在线一区二区三区| 中文字幕中文字幕在线一区| 成人福利在线看| 国产精品久久久久久久蜜臀| av高清久久久| 亚洲女同一区二区| 欧美私人免费视频| 日韩精品电影一区亚洲| 91精品午夜视频| 九色综合国产一区二区三区| 欧美成人官网二区| 国产精品18久久久久| 国产三区在线成人av| 99久久国产综合精品女不卡| 亚洲少妇屁股交4| 欧美中文字幕亚洲一区二区va在线| 一区二区在线观看免费视频播放| 欧洲一区在线观看| 首页欧美精品中文字幕| 久久一区二区三区四区| 高清国产午夜精品久久久久久| 中文字幕视频一区| 欧美日韩综合一区| 蜜桃av一区二区| 欧美高清在线一区| 欧美伊人久久久久久久久影院| 人人精品人人爱| 国产欧美精品一区二区色综合朱莉| 91美女片黄在线观看91美女| 性感美女极品91精品| 久久精品视频免费| 在线观看免费一区| 久久激情五月婷婷| 国产精品视频线看| 91麻豆精品国产91久久久使用方法| 激情丁香综合五月| 亚洲精品福利视频网站| 日韩精品在线网站| 色偷偷久久一区二区三区| 日韩中文欧美在线| 国产精品妹子av| 欧美一级视频精品观看| 色综合视频在线观看| 久久99精品视频| 亚洲电影欧美电影有声小说| 久久日韩精品一区二区五区| 欧美在线免费视屏| 国产乱码精品1区2区3区| 天天综合天天做天天综合| 国产精品美女www爽爽爽| 欧美一区二区在线视频| 色综合久久88色综合天天6| 精品一区二区三区的国产在线播放| 亚洲欧美怡红院| 久久亚洲欧美国产精品乐播| 欧美性猛交xxxxxxxx| www.日韩av| 国产精品一二三四五| 丝袜a∨在线一区二区三区不卡| 亚洲日本丝袜连裤袜办公室| 国产欧美一区二区三区鸳鸯浴| 91精品国产美女浴室洗澡无遮挡| 91丨porny丨蝌蚪视频| 国产麻豆精品在线观看| 蜜乳av一区二区| 五月天亚洲婷婷| 一区二区激情视频| 亚洲视频1区2区| 国产精品无码永久免费888| 欧美岛国在线观看| 91精品国产一区二区| 欧美色综合网站| 色综合久久中文综合久久97| 成人晚上爱看视频| 国产凹凸在线观看一区二区| 激情欧美一区二区三区在线观看| 日韩电影在线免费| 午夜免费久久看| 日韩主播视频在线| 视频在线在亚洲| 日韩福利电影在线| 奇米影视一区二区三区小说| 日韩电影在线观看一区| 丝袜美腿亚洲综合| 日本va欧美va欧美va精品| 日本不卡免费在线视频| 日本成人在线不卡视频| 婷婷六月综合亚洲| 日韩不卡手机在线v区| 免费观看在线综合| 美女一区二区三区在线观看| 久久99精品一区二区三区三区| 国产揄拍国内精品对白| 国产麻豆精品一区二区| 成人动漫视频在线| 99re视频精品| 欧美视频在线一区二区三区 | 亚洲综合久久久久| 性感美女极品91精品| 精品一区在线看| 成人国产亚洲欧美成人综合网| a在线欧美一区| 欧美性大战久久久久久久| 日韩视频免费观看高清完整版| 精品国产91九色蝌蚪| 中文字幕乱码日本亚洲一区二区| 亚洲日本在线观看| 日韩精品一级中文字幕精品视频免费观看 | 亚洲一区二区精品3399| 久久激情综合网| 972aa.com艺术欧美| 欧美美女视频在线观看| 欧美大胆人体bbbb| 中文字幕制服丝袜一区二区三区| 亚洲精品久久久蜜桃| 日本系列欧美系列| 成人av在线播放网站| 欧美调教femdomvk| 日韩视频免费观看高清在线视频| 国产午夜精品一区二区 | 欧美一区二区三区在| 久久精子c满五个校花| 亚洲免费视频中文字幕| 一区二区三区丝袜| 国产成人在线视频播放| 91成人免费网站| 久久影院视频免费| 久久久不卡网国产精品二区| 亚洲欧洲精品一区二区三区| 日韩不卡一二三区| eeuss鲁片一区二区三区在线观看| 51午夜精品国产| 欧美国产丝袜视频| 蜜臀精品一区二区三区在线观看| 国产呦精品一区二区三区网站| 91老司机福利 在线| 久久精品网站免费观看| 亚洲午夜av在线| 成人av午夜电影| 欧美成人性战久久| 国产aⅴ精品一区二区三区色成熟| 91女神在线视频| 日韩一级片网站| 日韩欧美在线1卡| 一个色综合av| 91丝袜国产在线播放| 久久综合精品国产一区二区三区| 亚洲成人一区在线| 不卡一二三区首页| 久久精品视频在线免费观看| 麻豆精品一区二区三区| 欧美伊人久久久久久久久影院| 成人欧美一区二区三区| 麻豆国产精品官网| 91精品国产综合久久精品| 国产亚洲综合色| 麻豆国产精品视频| 欧美成人精精品一区二区频| 一区二区成人在线观看| 色综合久久久久网| 欧美激情一区不卡| 国产乱码一区二区三区| 国产亚洲制服色| 精品制服美女丁香|