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

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

?? lprprocess.cpp

?? 能夠實現汽車的車牌定位并且最終識別車牌字符
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
		}

	pDestImg->Width = TempImg.Width;
	pDestImg->Height = TempImg.Height;
	pDestImg->pImg = TempImg.pImg;

	return 1;
}

int RectifyLP(PGrayImg pDestImg, PGrayImg pSrcImg, PGrayImg pModelImg)
{
	int i, j;
	int res = 0;
	TAngle Angle;

	double RectifyAngle;
	int iAngle;

	TGrayImg TempImg1, TempImg2;
	TGrayImg RowDiffImg;
    
	res = Diff(&RowDiffImg, pModelImg, H_FILTER);
	if (0 == res)
		return 0;

	res = HoughTrans(&Angle, &RowDiffImg, V_FILTER);
	if (0 == res)
		return 0;

	res = GrayImg_Free(&RowDiffImg);
	if (0 == res)
		return 0;

	res = Diff(&RowDiffImg, pModelImg, V_FILTER);
	if (0 == res)
		return 0;

	res = HoughTrans(&Angle, &RowDiffImg, H_FILTER);
	if (0 == res)
		return 0;

	res = GrayImg_Free(&RowDiffImg);
	if (0 == res)
		return 0;

	res = GrayImg_Malloc(&TempImg1, pSrcImg->Width, pSrcImg->Height);
	if (0 == res)
		return 0;

	for (i=0; i<pSrcImg->Height; i++)
		for (j=0; j<pSrcImg->Width; j++)
			*(TempImg1.pImg+i*TempImg1.Width+j) = 0;

	if (fabs(Angle.HAngle+90) != 90.0) 
		RectifyAngle = -(Angle.HAngle + 90.0)/180.0*PI;

	for (i=0; i<pSrcImg->Width; i++)
		for (j=0; j<pSrcImg->Height; j++)
		{
			if (i*tan(RectifyAngle) < 0.0)
				iAngle = (int)(i*tan(RectifyAngle)-0.5);
			else
				iAngle = (int)(i*tan(RectifyAngle)+0.5);
			
			if ((j-iAngle >= 0) && (j-iAngle < pSrcImg->Height))
				*(TempImg1.pImg+j*TempImg1.Width+i) = *(pSrcImg->pImg+(j-iAngle)*pSrcImg->Width+i);
		}

	res = GrayImg_Malloc(&TempImg2, pSrcImg->Width, pSrcImg->Height);
	if (0 == res)
		return 0;

	for (i=0; i<pSrcImg->Height; i++)
		for (j=0; j<pSrcImg->Width; j++)
			*(TempImg2.pImg+i*TempImg2.Width+j) = 0;

	if (fabs(Angle.VAngle) != 90.0)
		RectifyAngle = Angle.VAngle/180.0*PI;

	for (i=0; i<TempImg1.Height; i++)
		for (j=0; j<TempImg1.Width; j++)
		{
			if (i*tan(RectifyAngle) < 0.0)
				iAngle = (int)(i*tan(RectifyAngle)-0.5);
			else
				iAngle = (int)(i*tan(RectifyAngle)+0.5);

			if ((j-iAngle >= 0) && (j-iAngle < TempImg1.Width))
				*(TempImg2.pImg+i*TempImg2.Width+j) = *(TempImg1.pImg+i*TempImg1.Width+j-iAngle);
		}

	res = GrayImg_Free(&TempImg1);
	if (0 == res)
		return 0;

	pDestImg->Width = TempImg2.Width;
	pDestImg->Height = TempImg2.Height;
	pDestImg->pImg = TempImg2.pImg;

	return 1;

}

int Diff(PGrayImg pDestImg, PGrayImg pSrcImg, TPrjType PrjType)
{
	int i, j;
	int Temp;
	int res = 0;
	TGrayImg TempImg;

	res = GrayImg_Malloc(&TempImg, pSrcImg->Width, pSrcImg->Height);
	if (res == 0)
		return 0;

	switch(PrjType)
	{
	
	case H_FILTER:  

		for (i=0; i<pSrcImg->Height; i++)
			*(TempImg.pImg+i*TempImg.Width+0) = 0;

		for (i=0; i<pSrcImg->Height; i++)
			for (j=1; j<pSrcImg->Width; j++)
			{
				Temp = abs(*(pSrcImg->pImg+i*pSrcImg->Width+j)-*(pSrcImg->pImg+i*pSrcImg->Width+j-1));
				if (Temp > 80)
					Temp = 255;
				else
					Temp = 0;

				*(TempImg.pImg+i*TempImg.Width+j) = Temp;
			}

		break;

	case V_FILTER: 

		for (j=0; j<pSrcImg->Width; j++)
			*(TempImg.pImg+0+j) = 0;

		for (j=0; j<pSrcImg->Width; j++)
			for (i=1; i<pSrcImg->Height; i++)
			{
				Temp = abs(*(pSrcImg->pImg+i*pSrcImg->Width+j)-*(pSrcImg->pImg+(i-1)*pSrcImg->Width+j));
				
				if (Temp > 80)
					 Temp = 255;
				else
					 Temp = 0;

				*(TempImg.pImg+i*TempImg.Width+j) = Temp;
			}
		break;

	default:
		return 0;
	}

	pDestImg->Width = TempImg.Width;
	pDestImg->Height = TempImg.Height;
	pDestImg->pImg = TempImg.pImg;

	return 1;
}

int HoughTrans(PAngle pAngle, PGrayImg pSrcImg, TPrjType PrjType)
{
	int i, j, p, o, Max, Tempo;
	int *H;
	int HWidth, HHeight;
	double temp;

	o = -90; p = 0;

	HHeight = 4 * pSrcImg->Width + 1;
	HWidth = 181;
    H = (int*)malloc(HWidth*HHeight*sizeof(int));
	if (NULL == H)
		return 0;

	for (i=-(HHeight/2); i<=(HHeight/2); i++)
		for (j=-(HWidth/2); j<=(HWidth/2); j++)
			*(H+(i+HHeight/2)*HWidth+j+HWidth/2) = 0;

	switch (PrjType)
	{
	case H_FILTER: 

		for (i=0; i<pSrcImg->Height; i++)
			for (j=0; j<pSrcImg->Width; j++)
			{
				if (*(pSrcImg->pImg+i*pSrcImg->Width+j) == 255)
				{
					for (o=-10; o<=10; o++)
					{
						if (o >= 0)
							Tempo = o + 80;
						else
							Tempo = o - 80;

						temp = j*cos(Tempo*PI/180.0)+i*sin(Tempo*PI/180.0);
						if (temp < 0.0)
							p = (int)(temp-0.5);
						else
							p = (int)(temp+0.5);

						if ((p+HHeight/2 >= 0) && (p + HHeight/2 < HHeight))
							 (*(H+(p+HHeight/2)*HWidth+Tempo+HWidth/2))++;
					}
				}
			}
		Max = 0;
		for (i=-HHeight/2; i<=HHeight/2; i++)
			for (j=-10; j<=10; j++)
			{
				if (j >= 0)
					Tempo = j + 80;
				else
					Tempo = j - 80;

				if (Max<*(H+(i+HHeight/2)*HWidth+Tempo+HWidth/2))
				{
					Max = *(H+(i+HHeight/2)*HWidth+Tempo+HWidth/2);
					o = Tempo;   
					p = i;     
				}
			}
		pAngle->HAngle = o;

		break;

	case V_FILTER: 

		for (i=0; i<pSrcImg->Height; i++)
			for (j=0; j<pSrcImg->Width; j++)
			{
				if (*(pSrcImg->pImg+i*pSrcImg->Width+j) == 255)
				{

					for (o=-10; o<=10; o++)
					{
						temp = j*cos(o*PI/180.0)+i*sin(o*PI/180.0);
						if (temp < 0.0)
							p = (int)(temp-0.5);
						else
							p = (int)(temp+0.5);

						if ((p+HHeight/2 >= 0) && (p+HHeight/2 < HHeight))
							(*(H+(p+HHeight/2)*HWidth+o+HWidth/2))++;
					}
				}
			}

		Max = 0;

		for (i=-HHeight/2; i<=HHeight/2; i++)
			for (j=-10; j<=10; j++)
			{
				if (Max < *(H+(i+HHeight/2)*HWidth+j+HWidth/2))
				{
					Max = *(H+(i+HHeight/2)*HWidth+j+HWidth/2);
					o = j;  
					p = i;     
				}
			}
		pAngle->VAngle = o;
		break;
	default:
		if (H)
			free(H);
		return 0;
	}

	if (H)
	{
		free(H);
		H = NULL;
	}

	return 1;
}

int GetLPAccuratePos(RECT *lpRect, PGrayImg pSrcImg)
{
	int res = 0;

	TGrayImg DiffImg;
	TGrayImg LPImg;

	int UpYPos, DownYPos, LeftXPos, RightXPos;
	int *pHProject, *pVProject;

	res = Diff(&DiffImg, pSrcImg, H_FILTER);
	if (0 == res)
		return 0;

	pHProject = (int*)malloc(pSrcImg->Height*sizeof(int));

	res = ProjectImg(pHProject, &DiffImg, H_FILTER);
	if (0 == res)
		return 0;

	res = ProjectFilter(pHProject, pSrcImg->Height, IH_FILTER);
	if (0 == res)
		return 0;

	res = GetLPAccurateYPos(pHProject, pSrcImg->Height, &UpYPos, &DownYPos);
	if (0 == res)
		return 0;

	lpRect->left = 0;
	lpRect->right = pSrcImg->Width - 1;
	lpRect->top = UpYPos;
	lpRect->bottom = DownYPos;

	res = GetSubImg(&LPImg, pSrcImg, *lpRect);
	if (0 == res)
		return 0;

	res = GrayImg_Free(&DiffImg);
	if (0 == res)
		return 0;

	pVProject = (int*)malloc(LPImg.Width*sizeof(int));

	res = ProjectImg(pVProject, &LPImg, V_FILTER);
	if (0 == res)
		return 0;

	res = ProjectFilter(pVProject, LPImg.Width, IV_FILTER, DownYPos - UpYPos);
	if (0 == res)
		return 0;

	res = GetLPAccurateXPos(pVProject, LPImg.Width, DownYPos - UpYPos, &LeftXPos, &RightXPos);
	if (0 == res)
		return 0;

	if (pHProject != NULL)
	{
		free(pHProject);
		pHProject = NULL;
	}
	if (pVProject != NULL)
	{
		free(pVProject);
		pVProject = NULL;
	}
	
	res = GrayImg_Free(&LPImg);
	if (0 == res)
		return 0;

	lpRect->top = UpYPos;
	lpRect->bottom = DownYPos;
	lpRect->left = LeftXPos;
	lpRect->right = RightXPos;

	return 1;
}

int GetLPAccurateXPos(int *pProject, int PrjLen, int LPHeight, int *pLeftXPos, int *pRightXPos)
{

	int i, j, k;
	int TempLeft, TempRight;
	int TempPos[101], Code[101];
	BOOL Flag1, Flag2;

	*pLeftXPos = 0; 
	*pRightXPos = 0;

	for (i=0; i<PrjLen; i++)
	{
		if (*(pProject+i) != 0)
		{
			*pLeftXPos = i;
			break;
		}
	}

	if ((int)(4.4*LPHeight+0.5)+(*pLeftXPos) > PrjLen-1)
		*pRightXPos = PrjLen - 1;
	else
		*pRightXPos = (int)(4.4 * LPHeight + 0.5) + (*pLeftXPos);

	if (*(pProject+(*pRightXPos)) != 0)
	{
		for (i=(*pRightXPos); i<PrjLen; i++)
		{
			if  (*(pProject+i) == 0)
				break;
		}
		*pRightXPos = i;
	}

	if ((*pRightXPos)-(*pLeftXPos) > (int)(4.0*LPHeight+0.5))
	{
		Flag2 = TRUE;
		Flag1 = TRUE;
		j = 0; 
		k = 0;
		for (i=(*pLeftXPos); i<PrjLen; i++)
		{
			if ((*(pProject+i) != 0) && Flag1)
				Flag1 = FALSE;

			if ((*(pProject+i) == 0) && (!Flag1))
			{
				TempPos[j] = i; 
				j++;

				if (j > 100)
				{
					return 0;
				}

				TempLeft = i;  
				Flag1 = TRUE;
				Flag2 = FALSE;
			}

			if ((*(pProject+i) != 0) && (!Flag2))
			{
				TempRight = i; 
				if (TempRight-TempLeft < (int)(0.25*LPHeight+0.5))
					 Code[k] = 0;
				else
					 Code[k] = 1;
				k++;

				if (k > 100)
					return 0;

				Flag2 = TRUE;
			}
		}

		for (i=0; i<=j-2; i++)
		{
			if (Code[i] == 0)
			{
				if (Code[i+1] == 1)
				{
					if (TempPos[i]-(int)(0.45*LPHeight+0.5) > 0)
						*pLeftXPos = TempPos[i]-(int)(0.45*LPHeight+0.5);
					else
						*pLeftXPos = 0;

					break;
				}
			}
		}

		if ((int)(4.4*LPHeight+0.5)+(*pLeftXPos) < PrjLen-1)
			*pRightXPos = (int)(4.4*LPHeight+0.5)+(*pLeftXPos);
		else
			*pRightXPos = PrjLen - 1;

		if (*(pProject+(*pRightXPos)) != 0)
		{
			for (i=(*pRightXPos); i<PrjLen; i++)
			{
				if (*(pProject+i) == 0)
					break;
			}
			*pRightXPos = i;
		}
	}

	if ((*pRightXPos) <= (*pLeftXPos))
	{
		return 0;
	}

	return 1;
}

int GetLPAccurateYPos(int *pProject, int PrjLen, int *pUpYPos, int *pDownYPos)
{
	int x;
	int Temp, TempUp, TempDown;
	BOOL Flag;

	Flag = TRUE;
	Temp = 0;
	*pUpYPos = 0; *pDownYPos = 0;

	*(pProject+PrjLen-1) = 0;

	for (x=0; x<PrjLen; x++)
	{
		if (Flag && (*(pProject+x) != 0))
		{
			TempUp = x;
			Flag = FALSE;
		}
		if ((!Flag) && (*(pProject+x) == 0))
		{
		   TempDown = x;
		   Flag = TRUE;
		   if  (Temp < TempDown- TempUp)
		   {
				*pUpYPos = TempUp;
				*pDownYPos = TempDown;
				Temp = TempDown - TempUp;
		   }
		}
	}

	if ((*pDownYPos) <= (*pUpYPos))
		return 0;

	return 1;
}

int GetLPCharPos(int *pCharCount, RECT LPCharRect[], PGrayImg pSrcImg)
{

	int i, j, k, x, y;
	BOOL Flag, Flag1;
	int CharID;
	int avg;
	int TempLeft, TempRight;
	int Code[101];
	int *pOutLineProject;

	int res = 0;

	pOutLineProject = (int*)malloc(pSrcImg->Width*sizeof(int));

	res = OutLineProject(pOutLineProject, pSrcImg);
	if (0 == res)
		return 0;

	res = OutLineProjectFilter(pOutLineProject, pSrcImg->Width, pSrcImg->Height);
	if (0 == res)
		return 0;

	Flag = TRUE;
	CharID = 0;
	*(pOutLineProject+pSrcImg->Width-1) = 0;

	for (i=0; i<pSrcImg->Width; i++)
	{
		if ((*(pOutLineProject+i) != 0) && Flag)
		{
			LPCharRect[CharID].left = i;
			LPCharRect[CharID].top = 0;
			LPCharRect[CharID].bottom = pSrcImg->Height - 1;
			Flag = FALSE;
			avg = 0;
		}

		if ((*(pOutLineProject+i) == 0) && (!Flag))
		{
			LPCharRect[CharID].right = i;

			for (j=LPCharRect[CharID].left; j<=LPCharRect[CharID].right; j++)
			{
				avg += *(pOutLineProject+j);
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久aaaa樱花 | 精品对白一区国产伦| 国产成人免费在线| 亚洲国产成人av网| 国产精品久久影院| 精品处破学生在线二十三| 欧美三电影在线| 99久久精品国产一区二区三区| 日本不卡一二三| 亚洲mv大片欧洲mv大片精品| 国产精品久久免费看| 精品美女被调教视频大全网站| 91.com视频| 99国产精品一区| 福利一区二区在线观看| 久久99久久久久久久久久久| 亚洲午夜久久久久久久久久久| 国产精品成人在线观看| 欧美精品一区二| 日韩欧美一二区| 制服丝袜在线91| 欧美性xxxxxxxx| 在线观看视频一区| 91麻豆123| 91在线云播放| av亚洲产国偷v产偷v自拍| 国产精一区二区三区| 久久se精品一区精品二区| 丝袜美腿亚洲色图| 亚洲成在人线免费| 一区二区在线观看免费视频播放 | 久久综合久久99| 欧美一区二区精美| 91精品国产色综合久久不卡蜜臀 | 精品少妇一区二区三区日产乱码| 欧美日韩一本到| 欧美性色综合网| 在线亚洲高清视频| 欧美综合视频在线观看| 色综合久久中文综合久久牛| 99国产精品国产精品久久| zzijzzij亚洲日本少妇熟睡| 成人福利视频网站| heyzo一本久久综合| 成人爽a毛片一区二区免费| 成人午夜激情在线| 91碰在线视频| 欧美色手机在线观看| 88在线观看91蜜桃国自产| 日韩欧美亚洲一区二区| 久久久久一区二区三区四区| 国产亚洲成av人在线观看导航| 国产精品丝袜黑色高跟| 亚洲人成伊人成综合网小说| 亚洲高清在线视频| 日韩精品欧美精品| 九九国产精品视频| 成人在线综合网站| 色综合久久天天综合网| 91精品在线观看入口| 精品国产百合女同互慰| 日本一区二区三区四区| 久久精品国产秦先生| 韩日av一区二区| 丰满少妇久久久久久久| 色菇凉天天综合网| 91精品国产一区二区三区蜜臀| 欧美xxxxx裸体时装秀| 国产精品全国免费观看高清| 亚洲国产综合91精品麻豆| 另类小说图片综合网| 成人av网站免费| 欧美日韩国产成人在线免费| 久久色在线视频| 亚洲九九爱视频| 免费成人美女在线观看| 成人性生交大片免费看视频在线 | 亚洲欧美一区二区三区国产精品| 丝袜美腿亚洲一区二区图片| 国产成人一区在线| 欧美在线不卡一区| 久久久久综合网| 亚洲成人av免费| 成人一道本在线| 91精品中文字幕一区二区三区| 国产女主播视频一区二区| 亚洲成人动漫在线免费观看| 国产乱人伦偷精品视频免下载| 色婷婷综合久久久久中文 | 国产真实乱子伦精品视频| av不卡免费在线观看| 日韩亚洲欧美高清| 亚洲激情欧美激情| 国产一区二区不卡老阿姨| 欧美亚洲动漫另类| 国产午夜精品美女毛片视频| 日韩中文字幕区一区有砖一区 | 免费成人在线观看视频| 色综合久久中文字幕综合网| 久久久久久久网| 亚洲一二三专区| 成人黄色av网站在线| 精品国产区一区| 亚洲va中文字幕| 99久久夜色精品国产网站| 久久女同互慰一区二区三区| 亚洲v日本v欧美v久久精品| 97se亚洲国产综合在线| www精品美女久久久tv| 奇米四色…亚洲| 欧美日韩精品高清| 亚洲一区二区中文在线| 99久久精品费精品国产一区二区| 久久综合九色综合97婷婷女人| 香蕉久久一区二区不卡无毒影院| 99久久精品国产网站| 欧美激情综合五月色丁香小说| 麻豆91免费看| 欧美一区二区三区的| 亚洲国产毛片aaaaa无费看 | 欧美精品在线观看播放| 一区二区在线观看av| 99精品偷自拍| 国产精品三级久久久久三级| 国产精品白丝jk白祙喷水网站 | 综合久久综合久久| 成人av在线资源| 国产精品国产成人国产三级| 国产99精品在线观看| 欧美一区二区三区喷汁尤物| 婷婷国产v国产偷v亚洲高清| 在线观看av一区| 夜夜精品浪潮av一区二区三区| 一本大道av伊人久久综合| 国产精品传媒入口麻豆| 成人h精品动漫一区二区三区| 国产欧美日韩精品a在线观看| 国产盗摄一区二区| 欧美激情一区二区三区全黄| 国产一区二区三区免费播放| 精品少妇一区二区三区日产乱码 | 欧美老女人在线| 视频一区视频二区在线观看| 欧美日韩国产在线观看| 日韩制服丝袜先锋影音| 日韩丝袜情趣美女图片| 久久99久国产精品黄毛片色诱| 久久综合久久综合九色| 成人中文字幕电影| 亚洲卡通欧美制服中文| 欧美日韩精品一区二区| 毛片av一区二区三区| 久久综合九色欧美综合狠狠| 国产成人一区在线| 亚洲丝袜自拍清纯另类| 欧美在线观看18| 精品在线你懂的| 中文字幕第一区二区| 欧美中文字幕亚洲一区二区va在线 | 精品一区二区三区日韩| 国产日韩精品一区二区浪潮av | 视频一区二区欧美| 久久综合狠狠综合久久激情| 岛国一区二区在线观看| 亚洲一二三区不卡| 精品第一国产综合精品aⅴ| 成人免费视频caoporn| 一区二区三区在线观看动漫| 欧美一区二区免费视频| 国产精品一线二线三线精华| 亚洲欧洲日产国码二区| 欧美久久久久中文字幕| 国产成人欧美日韩在线电影| 亚洲免费av网站| 日韩精品在线网站| 94-欧美-setu| 另类小说欧美激情| 亚洲同性gay激情无套| 日韩一级在线观看| www.亚洲在线| 欧美aⅴ一区二区三区视频| 国产精品拍天天在线| 91精品国产福利在线观看| 成人黄色电影在线 | 中文字幕制服丝袜一区二区三区 | 欧美怡红院视频| 国产麻豆精品视频| 亚洲成av人片一区二区梦乃 | 亚洲综合男人的天堂| 久久精品水蜜桃av综合天堂| 在线观看亚洲成人| 国产盗摄精品一区二区三区在线| 亚洲二区在线观看| 国产精品女上位| 欧美α欧美αv大片| 欧美色视频一区| 色婷婷综合久久久久中文 | 欧美国产精品一区二区三区| 国产精品久久久久久久第一福利| 欧美二区乱c少妇|