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

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

?? lprprocess.cpp

?? 能夠實現汽車的車牌定位并且最終識別車牌字符
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/*
* Copyright (c) 2003, try2it.com
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
* 
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* 
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307, USA.
*
* 文件名稱:LPRHelper.cpp
* 文件標識:LPR-02-05
* 摘要:牌照識別的圖像處理部分
*
* 當前版本:1.0
* 作者:try2it.com
* 開始日期:2003年09月28日
* 完成日期:2003年09月30日
*/
#include "stdafx.h"
#include <malloc.h>
#include <math.h>
#include <stdio.h>
#include <io.h>
#include "../include/types.h"
#include "LPRHelper.h"
#include "LPRProcess.h"

/*------------------------------------------------------------------
* 以下聲明全局變量
------------------------------------------------------------------*/
int g_LPHeight = 80;       
int g_LPWidth = 220;     
int g_LPAccurateHeight = 40; 
int g_BYDiff = 10;        
int g_BWDiff = 20;       
int g_BlackLP = 80;       
int g_WhiteLP = 220;      
int g_BYLP = 60;         
int g_Threshold = 160;    
int g_Threshold_HLP = 100; 
int g_LeftOffset = 0;      
int g_RightOffset = 0;    
int g_TopOffset = 0;       
int g_BottomOffset = 0;  

int InteEqualize(PGrayImg pDestImg, PGrayImg pSrcImg)
{
	int res = 0;
	int HistoGram[256];
	int bMap[256];

	int Temp, i, j;
	TGrayImg TempImg;

	res = CalHistoGram(HistoGram, pSrcImg);
	if (res == 0)
		return 0;

	res = GrayImg_Malloc(&TempImg, pSrcImg->Width, pSrcImg->Height);
	if (res == 0)
		return 0;
	
    for (i=0; i<256; i++)
    {
		Temp = 0;
        for (j=0; j<=i; j++)
			Temp = Temp + HistoGram[j];

        bMap[i] = (int)(Temp*255.0/pSrcImg->Height/pSrcImg->Width+0.5);
	}

    for (i=0; i<pSrcImg->Height; i++)
		for (j=0; j<pSrcImg->Width; j++)
        {
			*(TempImg.pImg+i*TempImg.Width+j) = (BYTE)bMap[*(pSrcImg->pImg+i*pSrcImg->Width+j)];
		}

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

	if (pDestImg->pImg) 
	{
		pDestImg->pImg = NULL;
	}

	pDestImg->pImg = TempImg.pImg;

	return res;
}

int CalHistoGram(int HistoGram[], PGrayImg pSrcImg)
{
	int i, j;
	
	for (i=0; i<256; i++) HistoGram[i] = 0;

	for (i=0; i<pSrcImg->Height; i++)
		for (j=0; j<pSrcImg->Width; j++)
			HistoGram[*(pSrcImg->pImg+i*pSrcImg->Width+j)]++;

	return 1;
}

int MedianFilter(PGrayImg pDestImg, PGrayImg pSrcImg, int iFilterH, 
				               int iFilterW, int iFilterMX, int iFilterMY)
{
	int i, j, l, k;
	int res = 0;
	BYTE *aValue;

	TGrayImg TempImg;

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

	aValue = (BYTE*)malloc(iFilterH * iFilterW);
	if (aValue == NULL)
		return 0;

	for (i=iFilterMY; i<=TempImg.Height-iFilterH+iFilterMY; i++)
		for (j=iFilterMX; j<=TempImg.Width-iFilterW+iFilterMX; j++)
		{
			for (k=0; k<iFilterH; k++)
				for (l=0; l<iFilterW; l++)
				{
					*(aValue+k*iFilterW+l) = *(pSrcImg->pImg+(i-iFilterMY+k)*TempImg.Width+j-iFilterMX+1);
				}
			*(TempImg.pImg+i*TempImg.Width+j) = GetMedianNum(aValue, iFilterH*iFilterW);
		}

	if (aValue!=NULL)
		free(aValue);

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

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

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

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

	pDestImg->Width = TempImg.Width;
	pDestImg->Height = TempImg.Height;
	if (pDestImg->pImg)
	{
		pDestImg->pImg = NULL;
	}
	pDestImg->pImg = TempImg.pImg;

	return res;
}

BYTE GetMedianNum(BYTE *aValue, int iLength)
{
	int i, j;
	BYTE tmp;

	for (j=1; j<iLength; j++)
		for (i=0; i<iLength-j; i++)
		{
			if ((*(aValue+i)) > (*(aValue+i+1)))
			{
				tmp = *(aValue+i);
				*(aValue+i) = *(aValue+i+1);
				*(aValue+i+1) = tmp;
			}
		}

	if ((iLength & 1) > 0)
	{
		tmp = *(aValue+(iLength+1)/2);
	}
	else
	{
		tmp = (*(aValue+iLength/2) + *(aValue+iLength/2+1))/2;
	}

	return tmp;
}

int GetLPPos(RECT *lpRect, PGrayImg pSrcImg)
{
	int res = 0;
	static int TemplateArr[9] = {1,0,-1,   
                                 2,0,-2,
								 1,0,-1};
	static int TemplateArr1[9] = {1,1,1,   
		                          1,0,1,
								  1,1,1};

	TGrayImg EdgeImg;          
	TGrayImg TwoImg;          
	TGrayImg HLPImg, HLPImg1, HLPImg2; 

	int StartYPos=0;           
	int UpYPos=0, DownYPos=0;  
	int LeftXPos=0, RightXPos=0; 
	int Threshold;            

	RECT Rect;

	int *pHProject = NULL;      
	int *pVProject = NULL;    

	BOOL flag;

	res = Template(&EdgeImg, pSrcImg, TemplateArr, 3 ,1);
	if (res == 0)
		return 0;

	StartYPos = EdgeImg.Height - 1;
	Threshold = g_Threshold;

	pHProject = (int*)malloc(pSrcImg->Height*sizeof(int));
	if (NULL == pHProject)
		return 0;

	flag = TRUE;
	while(flag)
	{
		res = TwoPixelCarImg(&TwoImg, &EdgeImg, Threshold);
		if (0 == res)
			return 0;

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

		res = ProjectFilter(pHProject, TwoImg.Height, H_FILTER);
		if (0 == res)
			return 0;

		res = GetLPYPos(pHProject, TwoImg.Height, &StartYPos, &UpYPos, &DownYPos);
		if (0 == res)
		{
			Threshold -= 10;
			if (Threshold < 50)
			{
				return 0;
			}
		}
		else
		{
			flag = FALSE;
		}

	}
	
	LeftXPos = 0;
	RightXPos = pSrcImg->Width - 1;
	Rect.left = LeftXPos;
	Rect.top = UpYPos;
	Rect.right = RightXPos;
	Rect.bottom = DownYPos;

	res = GetSubImg(&HLPImg1, &EdgeImg, Rect);
	if (0 == res)
		return 0;

////////////////////////////////////////////////////////////////////////////////////////////
	res = Template(&HLPImg2, &HLPImg1, TemplateArr1, 3, 1.0/8.0);
	if (0 == res)
		return 0;

	res = TwoPixelCarImg(&HLPImg, &HLPImg2, g_Threshold_HLP);
	if (0 == res)
		return 0;

	GrayImg_Free(&HLPImg1);
	GrayImg_Free(&HLPImg2);

	pVProject = (int*)malloc(pSrcImg->Width*sizeof(int));
	if (NULL == pVProject)
		return 0;

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

	res = ProjectFilter(pVProject, pSrcImg->Width, V_FILTER, g_LPAccurateHeight);
	if (0 == res)
		return 0;

	flag = TRUE;
	while(flag)
	{
		res = GetLPXPos(pVProject, pSrcImg->Width, &LeftXPos, &RightXPos);
		if (0 == res)
		{
			res = GetLPYPos(pHProject, pSrcImg->Height, &StartYPos, &UpYPos, &DownYPos);
			if (0 == res)
			{
				StartYPos = pSrcImg->Height - 1;
				res = GetLPYPos(pHProject, pSrcImg->Height, &StartYPos, &UpYPos, &DownYPos);
				if (0 == res)
					return 0;
				else 
				{
					res = GetLPXPos(pVProject, pSrcImg->Width, &LeftXPos, &RightXPos);
					if (0 == res)
						return 0;
					else
					{
						RightXPos += (int)(g_LPWidth * 0.8 + 0.5);
						flag = FALSE;
					}
				}
			}
		}
		else
		{
			if (RightXPos - LeftXPos < 0.6 * g_LPWidth)
			{
				res = GetLPYPos(pHProject, pSrcImg->Height, &StartYPos, &UpYPos, &DownYPos);
				if (0 == res)
				{
					StartYPos = pSrcImg->Height - 1;
					res = GetLPYPos(pHProject, pSrcImg->Height, &StartYPos, &UpYPos, &DownYPos);
					if (0 == res)
						return 0;
					else 
					{
						res = GetLPXPos(pVProject, pSrcImg->Width, &LeftXPos, &RightXPos);
						if (0 == res)
							return 0;
						else
						{
						   RightXPos += (int)(g_LPWidth * 0.8 + 0.5);
						   flag = FALSE;
						}
					}
				}
			}
			else
				flag = FALSE;
		}
	}

	if (pHProject!=NULL)
	{
		free(pHProject);
		pHProject = NULL;
	}

	if (pVProject!=NULL)
	{
		free(pVProject);
		pVProject = NULL;
	}

	lpRect->left = LeftXPos;
	lpRect->right = RightXPos;
	lpRect->top = UpYPos;
	lpRect->bottom = DownYPos;
	
	GrayImg_Free(&HLPImg);
	GrayImg_Free(&TwoImg);
	GrayImg_Free(&EdgeImg);

	return 1;
}

int GetLPYPos(int *pProject, int PrjLen, int *pStartYPos, int *pUpYPos, int *pDownYPos)
{
	int y, Temp;
	BOOL Flag;

	Flag = TRUE;
	*pDownYPos = 0;
	*pUpYPos = 0;
	*(pProject+PrjLen-1) = 0;

	for (y=*pStartYPos; y>=0; y--)
	{
		if ((*(pProject+y)!=0) && Flag)
		{
			*pDownYPos = y;
			Flag = FALSE;
		}
		if ((*(pProject+y) == 0) && (!Flag))
		{
		   *pUpYPos = y;
		   break;
		}
	}

	*pStartYPos = *pUpYPos;

	if (*pDownYPos <= *pUpYPos)
	{
		*pStartYPos = PrjLen-1;
		return 0;
	}

	Temp = *pDownYPos - *pUpYPos;
	if (Temp < g_LPHeight)
	{
	  *pDownYPos = *pDownYPos + (int)((g_LPHeight - Temp) * 0.6 + 0.5);
	  if (*pDownYPos > PrjLen - 1)
		   *pDownYPos = PrjLen - 1;

	  *pUpYPos = *pUpYPos - (int)((g_LPHeight - Temp) * 0.4 + 0.5);

	  if (*pUpYPos < 0)
		   *pUpYPos = 0;
	}

	if (Temp > g_LPHeight * 1.5)
	{
		*pDownYPos = *pDownYPos + (int)(g_LPHeight * 0.125 + 0.5);

		if (*pDownYPos > PrjLen - 1)
		   *pDownYPos = PrjLen - 1;

		*pUpYPos = *pDownYPos - g_LPHeight;

		*pUpYPos = *pUpYPos - (int)(g_LPHeight * 0.15 + 0.5);

		if (*pUpYPos < 0)
			*pUpYPos = 0;
	}

	return 1;
}

int GetLPXPos(int *pProject, int PrjLen, int *pLeftXPos, int *pRightXPos)
{
	int x, Temp;
	int TempLeft, TempRight;
	BOOL flag;

	flag = TRUE;
	Temp = 0;

	*pLeftXPos = 0; 
	*pRightXPos = 0;

	*(pProject+PrjLen-1) = 0;

	for (x=0; x<PrjLen; x++)
	{
		if (flag && (*(pProject+x) != 0))
		{
			TempLeft = x;
			flag = FALSE;
		}

		if ((!flag) && (*(pProject+x) == 0))
		{
			TempRight = x;
			flag = TRUE;
			if (Temp < TempRight - TempLeft)
			{
				*pLeftXPos = TempLeft;
				*pRightXPos = TempRight;
				Temp = TempRight - TempLeft;
			}
		}
	}

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

int Template(PGrayImg pDestImg, PGrayImg pSrcImg, int TemplateArr[], int TemplateN, double Coef)
{
	int temp, y, x, i, j;
	int res = 0;
	TGrayImg TempImg;

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

	for (x=TemplateN/2; x<pSrcImg->Height-TemplateN/2; x++)
		for (y=TemplateN/2; y<pSrcImg->Width-TemplateN/2; y++)
		{
			temp = 0;
			for (i=-TemplateN/2; i<=TemplateN/2; i++)
				for (j=-TemplateN/2; j<=TemplateN/2; j++)
					temp = temp + *(pSrcImg->pImg+(x+i)*pSrcImg->Width+(y+j)) *
		                 TemplateArr[(i+TemplateN/2)*TemplateN+j+TemplateN/2];

			temp = (int)(abs(temp) * Coef + 0.5);

			if (temp > 255)
				temp = 255;

			*(TempImg.pImg+x*TempImg.Width+y) = temp;
		}
	
	for (x=0; x<pSrcImg->Height; x++)
		for (y=0; y<TemplateN/2; y++)
			*(TempImg.pImg+x*TempImg.Width+y) = 0;

	for (x=0; x<pSrcImg->Height; x++)
		for (y=pSrcImg->Width-TemplateN/2; y<pSrcImg->Width; y++)
			*(TempImg.pImg+x*TempImg.Width+y) = 0;

	for (x=0; x<TemplateN/2; x++)
		for (y=0; y<pSrcImg->Width; y++)
			*(TempImg.pImg+x*TempImg.Width+y) = 0;

	for (x=pSrcImg->Height-TemplateN/2; x<pSrcImg->Height; x++)
		for (y=0; y<pSrcImg->Width; y++)
			*(TempImg.pImg+x*TempImg.Width+y) = 0;

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

	return 1;
}

int ProjectImg(int *pProject, PGrayImg pSrcImg,  TPrjType PrjType)
{
	int i, j;

	switch (PrjType)
	{
	case H_FILTER:

		for (i=0; i<pSrcImg->Height; i++)
			*(pProject+i) = 0;

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

		*(pProject+pSrcImg->Height-1) = 0;

		break;

	case V_FILTER:

		for (i=0; i<pSrcImg->Width; i++)
			*(pProject+i) = 0;

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久天天| 99国产精品99久久久久久| 国产欧美日韩精品在线| 丝袜亚洲精品中文字幕一区| 精品国产乱码久久久久久牛牛 | 欧美系列亚洲系列| 国产午夜精品福利| 欧美视频你懂的| 欧美激情在线一区二区三区| 国产精品 欧美精品| 91精选在线观看| eeuss鲁一区二区三区| 国产精品福利一区二区三区| 欧美激情综合五月色丁香小说| 日本精品视频一区二区三区| 日韩av午夜在线观看| 正在播放一区二区| av在线不卡网| 亚洲高清免费一级二级三级| 日韩经典中文字幕一区| 久久综合狠狠综合久久综合88 | 国产精品538一区二区在线| 日本一区二区成人在线| 欧美色老头old∨ideo| 国产成人av一区二区三区在线| 精品综合久久久久久8888| 欧美婷婷六月丁香综合色| 五月天激情小说综合| 亚洲视频在线观看三级| 亚洲精品国产一区二区精华液 | 精品第一国产综合精品aⅴ| 欧美日韩精品免费| 91亚洲精品乱码久久久久久蜜桃| 国产亚洲自拍一区| 久久久久久日产精品| 91麻豆精品国产自产在线观看一区| 日本在线不卡视频| 亚洲男同性恋视频| 亚洲综合一区在线| 捆绑变态av一区二区三区| 免费看欧美女人艹b| 亚洲成a人片在线观看中文| 日韩av网站在线观看| 亚洲网友自拍偷拍| 一区二区三区四区国产精品| 91福利社在线观看| 欧美亚洲禁片免费| 国产精品高潮呻吟| 久久日一线二线三线suv| 一本色道久久综合亚洲aⅴ蜜桃| 在线精品视频免费播放| 日本高清视频一区二区| 亚洲123区在线观看| 色激情天天射综合网| 久久久激情视频| 99riav久久精品riav| 欧美羞羞免费网站| 亚洲国产精品av| 国产久卡久卡久卡久卡视频精品| 日韩电影在线观看网站| 经典三级一区二区| 国产精品久久久久久久久晋中 | 亚洲最大成人网4388xx| 欧美国产精品中文字幕| 亚洲免费观看高清在线观看| 日韩av中文字幕一区二区| 日本久久一区二区| 亚洲va韩国va欧美va精品| 亚洲欧美另类小说视频| 91亚洲永久精品| 亚洲欧美激情在线| 国产精品一级在线| 精品中文字幕一区二区| 国产九色sp调教91| wwwwxxxxx欧美| 亚洲综合av网| 欧美一区二区三区视频免费播放| 久久精品国产亚洲aⅴ| 色一情一乱一乱一91av| 亚洲日本一区二区| 日韩av网站免费在线| 91在线免费看| 国产精品你懂的在线欣赏| 欧洲亚洲精品在线| 亚洲国产综合色| 欧美一区二区国产| 免费成人在线视频观看| 91 com成人网| 欧美午夜一区二区| 亚洲一区二区三区四区在线| 欧美日韩卡一卡二| 亚洲资源中文字幕| 久久这里只精品最新地址| 国产一区二区三区免费在线观看| 丝袜美腿亚洲色图| 91麻豆产精品久久久久久| 久久这里只精品最新地址| 91亚洲午夜精品久久久久久| 午夜免费欧美电影| 5858s免费视频成人| 日韩一区二区在线观看| 91在线国产福利| 日韩精品一区在线| 久久精品国产77777蜜臀| 精品欧美乱码久久久久久| 在线观看91视频| 亚洲黄网站在线观看| 欧美日韩aaa| 青椒成人免费视频| 香港成人在线视频| 国产精品国产三级国产普通话三级| 欧美中文字幕亚洲一区二区va在线| 国产精品小仙女| 日韩和欧美一区二区三区| 欧美视频完全免费看| 一片黄亚洲嫩模| 国产精品国产自产拍在线| 色av成人天堂桃色av| 午夜精品福利一区二区三区av | 久久午夜免费电影| 老色鬼精品视频在线观看播放| 亚洲成人一区二区在线观看| 欧美午夜精品一区二区三区| 久久日一线二线三线suv| 3d成人动漫网站| 91精品欧美综合在线观看最新| 天天亚洲美女在线视频| 久久久精品tv| 日韩欧美精品在线视频| 成人深夜福利app| 国产麻豆一精品一av一免费| 欧美日韩性生活| 欧美三级视频在线| 欧美国产欧美综合| 国产欧美一区二区精品性色超碰 | 欧美视频一区在线观看| 成人av综合一区| 午夜视频在线观看一区二区 | 亚洲123区在线观看| 日韩国产高清在线| 亚洲国产欧美一区二区三区丁香婷| 美脚の诱脚舐め脚责91| 久久久久久久久久久久电影| 日韩午夜中文字幕| 91精品国产免费久久综合| 欧美午夜片在线看| 国产欧美日韩精品一区| 日韩av成人高清| 99久久免费国产| 国产日本亚洲高清| 洋洋成人永久网站入口| 久久99九九99精品| gogo大胆日本视频一区| 一区二区三区久久| 老司机午夜精品99久久| 一本大道久久精品懂色aⅴ| 欧美精品一区二区三区视频| 亚洲国产精品一区二区尤物区| 91啦中文在线观看| 欧美一区二区三区系列电影| 欧美日韩精品一区二区三区蜜桃| 亚洲欧美国产毛片在线| 日韩**一区毛片| 欧美成人r级一区二区三区| 亚洲小少妇裸体bbw| 欧美人与禽zozo性伦| 国产农村妇女毛片精品久久麻豆 | 久久毛片高清国产| 国产揄拍国内精品对白| 国产欧美日韩另类视频免费观看| 日本一区二区电影| 亚洲欧美日韩国产中文在线| 欧美亚洲自拍偷拍| 亚洲电影你懂得| 天堂蜜桃91精品| 26uuu国产在线精品一区二区| 久久69国产一区二区蜜臀| av午夜一区麻豆| 国产盗摄视频一区二区三区| 精品国产乱码久久久久久浪潮| 欧美xxxx在线观看| 国产麻豆精品在线| 视频精品一区二区| 51精品国自产在线| 男女视频一区二区| 中文字幕亚洲成人| 91福利在线观看| 精品一区二区三区不卡 | 丁香一区二区三区| 亚洲精品一区二区三区影院| 欧美aaa在线| 国产亚洲综合性久久久影院| 国产精品一区不卡| 成人小视频在线观看| 午夜精品福利视频网站| 欧美一区二区福利视频| 成人午夜免费视频| 精品无人区卡一卡二卡三乱码免费卡| 国产喷白浆一区二区三区| 中文字幕精品三区|