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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? recoprocess.cpp

?? 能夠?qū)崿F(xiàn)汽車的車牌定位并且最終識別車牌字符
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
* 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
* 文件標(biāo)識:LPR-02-05
* 摘要:牌照識別的圖像處理部分
*
* 當(dāng)前版本:1.0
* 作者:try2it.com
* 開始日期:2003年09月28日
* 完成日期:
*/
#include "stdafx.h"
#include <malloc.h>
#include <math.h>
#include <stdio.h>
#include "../include/types.h"
#include "RecoHelper.h"
#include "RecoProcess.h"

int GetStdImg(PGrayImg pDestImg, PGrayImg pSrcImg)
{
	int i, j, res=0;
	RECT Rect;
	TGrayImg TempImg;
	BOOL bFlag = FALSE;

	//Rect.top = 0;
	//Rect.bottom = pSrcImg->Height-1;
	//Rect.left = 0;
	//Rect.right = pSrcImg->Width-1;

	bFlag = FALSE;
	for (i=0; i<pSrcImg->Height; i++)
	{
		for (j=0; j<pSrcImg->Width; j++)
			if (*(pSrcImg->pImg+i*pSrcImg->Width+j) == 255)
			{
				Rect.top = i;
				bFlag = TRUE;
				break;
			}
		if (bFlag)
			break;
	}


	bFlag = FALSE;
	for (i=pSrcImg->Height-1; i>=0; i--)
	{
		for (j=0; j<pSrcImg->Width; j++)
			if (*(pSrcImg->pImg+i*pSrcImg->Width+j) == 255)
			{
				Rect.bottom = i;
				bFlag = TRUE;
				break;
			}
		if (bFlag)
			break;
	}

	bFlag = FALSE;
	for (j=0; j<pSrcImg->Width; j++)
	{
		for (i=0; i<pSrcImg->Height; i++)
			if (*(pSrcImg->pImg+i*pSrcImg->Width+j) == 255)
			{
				Rect.left = j;
				bFlag = TRUE;
				break;
			}
		if (bFlag)
			break;
	}

	bFlag = FALSE;
	for (j=pSrcImg->Width-1; j>=0; j--)
	{
		for (i=0; i<pSrcImg->Height; i++)
			if (*(pSrcImg->pImg+i*pSrcImg->Width+j) == 255)
			{
				Rect.right = j;
				bFlag = TRUE;
				break;
			}
		if (bFlag)
			break;
	}

	res = GrayImg_Malloc(&TempImg, Rect.right-Rect.left+1, Rect.bottom-Rect.top+1);
	if (0 == res)
		return 0;
	
	for (i=0; i<TempImg.Height; i++)
		for (j=0; j<TempImg.Width; j++)
		{
			*(TempImg.pImg+i*TempImg.Width+j) =
				*(pSrcImg->pImg+(i+Rect.top)*pSrcImg->Width+(j+Rect.left));
		}

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

	return 1;
}

int Zoom(PGrayImg pDestImg, PGrayImg pSrcImg, double HRatio, double VRatio)
{
	double numH, numV;
	int Wold, Hold, Wnew, Hnew;
	int x1, y1, x0, y0;

	int res = 0;

	TGrayImg TempImg;

	if (HRatio == 0.0) HRatio = 1;
	if (VRatio == 0.0) VRatio = 1;

	numH = 1.0 / HRatio;
	numV = 1.0 / VRatio;
	Wold = pSrcImg->Width;
	Hold = pSrcImg->Height;
	Wnew = (int)(Wold * HRatio * 1.0 + 0.5);
	Hnew = (int)(Hold * VRatio * 1.0 + 0.5);

	res = GrayImg_Malloc(&TempImg, Wnew, Hnew);
	if (0 == res)
		return 0;

	if ((HRatio < 1.0) || (VRatio < 1.0))  
	{
		for (y0=0; y0<pSrcImg->Height; y0++)
			for (x0=0; x0<pSrcImg->Width; x0++)
			{
				if ((*pSrcImg->pImg+y0*pSrcImg->Width+x0) == 255)
				{
					x1 = (int)(x0 * HRatio * 1.0 + 0.5);
					y1 = (int)(y0 * VRatio * 1.0 + 0.5);
					if((x1 >= 0) && (x1 < Wnew) && (y1 >= 0) && (y1 < Hnew))
						*(TempImg.pImg+y1*TempImg.Width+x1) = *(pSrcImg->pImg+y0*pSrcImg->Width+x0);
				}
			}
	}	
	else 
	{  
		for (y1=0; y1<TempImg.Height; y1++)
			for (x1=0; x1<TempImg.Width; x1++)
			{
				x0 = (int)(x1 * numH);
				y0 = (int)(y1 * numV);
				if((x0 >= 0) && (x0 < Wold) && (y0 >= 0) && (y0 < Hold))
						*(TempImg.pImg+y1*TempImg.Width+x1) = *(pSrcImg->pImg+y0*pSrcImg->Width+x0);
			}
	}

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

	return 1;
}

int ImgMatch(int *pMatchNum, PGrayImg pSrcImg, PGrayImg pModelImg)
{
	int x, y;
	int ImgCount;
	int Width, Height;

	ImgCount = 0;

	if (pSrcImg->Width > pModelImg->Width)
		Width = pModelImg->Width;
	else
		Width = pSrcImg->Width;

	if (pSrcImg->Height > pModelImg->Height)
		Height = pModelImg->Height;
	else
		Height = pSrcImg->Height;

	for (y=0; y<Height; y++)
		for (x=0; x<Width; x++)
		{
			ImgCount += abs(*(pSrcImg->pImg+y*pSrcImg->Width+x) - *(pModelImg->pImg+y*pModelImg->Width+x)) / 255;
		}

	*pMatchNum = ImgCount;

	return 1;
}

int RecoAgain(int *pCarSignID, PGrayImg pLPCharImg, int MatchNum[], TLPNumType LPNumType)
{
	int CarSignID;
	int i, j, nCount, nAllCount;
	int FirstY=0;
	BOOL bFlag;

	CarSignID = *pCarSignID;

	switch (CarSignID)
	{
	case 'G'-'A'+10:
		if (MatchNum['G'-'A'+10] == 0) break;
		
		if ((1.0*MatchNum[0]-MatchNum['G'-'A'+10])/MatchNum['G'-'A'+10] > 0.20 &&
			(1.0*MatchNum[8]-MatchNum['G'-'A'+10])/MatchNum['G'-'A'+10] > 0.20 &&
			(1.0*MatchNum['Q'-'A'+10]-MatchNum['G'-'A'+10])/MatchNum['G'-'A'+10] > 0.20 &&
			 (1.0*MatchNum['D'-'A'+10]-MatchNum['G'-'A'+10])/MatchNum['G'-'A'+10] > 0.20)

			break;
		
		bFlag = FALSE;
		nCount = 0;
		for (j=0; j<pLPCharImg->Width; j++)
		{
			i = (int)(1.0/3.0*pLPCharImg->Height);

			if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j)==255 && !bFlag)
			{
				nCount++;
				bFlag = TRUE;
			}

			if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 0 && bFlag)
			{
				bFlag = FALSE;
			}

		}

		if (nCount > 1)
		{
			switch (LPNumType)
			{
			case LPNUM_EN:

				*pCarSignID = 'O'-'A'+10;
				RecoAgain(pCarSignID, pLPCharImg, MatchNum, LPNumType);

				break;

			case LPNUM_ENNUM:

				*pCarSignID = 0;
				RecoAgain(pCarSignID, pLPCharImg, MatchNum, LPNumType);

				break;
			}
		}

		break;

	case 'Z'-'A'+10:  

		if (MatchNum['Z'-'A'+10] == 0) break;
		if ((1.0*MatchNum[2]-MatchNum['Z'-'A'+10])/MatchNum['Z'-'A'+10] > 0.40)
			break;

		nCount = 0;
		nAllCount = 0;
		for (i=0; i<(int)(0.1*pLPCharImg->Height+0.5); i++)
			for (j=(int)(0.9*pLPCharImg->Width); j<pLPCharImg->Width; j++)
			{
				if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 255)
					nCount++;
				nAllCount++;
			}

		if (0 == nAllCount) break;
		if (nCount*1.0/nAllCount < 0.5)
		{
			switch (LPNumType)
			{
			case LPNUM_EN:
				break;

			case LPNUM_ENNUM:

				*pCarSignID = 2;

				break;
			}
		}

		break;

	case 8:  

		if (MatchNum[8] == 0) break;
		if ((1.0*MatchNum[0]-MatchNum[8])/MatchNum[8] > 0.20 &&
			 (1.0*MatchNum['D'-'A'+10]-MatchNum[8])/MatchNum[8] > 0.20 &&
			 (1.0*MatchNum['G'-'A'+10]-MatchNum[8])/MatchNum[8] > 0.20 &&
			 (1.0*MatchNum['Q'-'A'+10]-MatchNum[8])/MatchNum[8] > 0.20 &&
			 (1.0*MatchNum['B'-'A'+10]-MatchNum[8])/MatchNum[8] > 0.20)
			break;
		
		bFlag = FALSE;
		nCount = 0;
		i = (int)(1.0/3.0*pLPCharImg->Height);
		for (j=0; j<pLPCharImg->Width; j++)
		{
			if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j)==255 && !bFlag)
			{
				nCount++;
				bFlag = TRUE;
			}

			if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 0 && bFlag)
			{
				bFlag = FALSE;
			}

		}
		
		if (nCount <=1)
		{
			switch (LPNumType)
			{
			case LPNUM_ENNUM:

				*pCarSignID = 'G'-'A'+10;

				break;
			}

			break;
		}

		bFlag = FALSE;
		nCount = 0;
		FirstY = 0;
		for (i=0; i<pLPCharImg->Height; i++)
		{
			j = (int)(1.0/2.0*pLPCharImg->Width);

			if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j)==255 && !bFlag)
			{
				if (nCount == 0)
					FirstY = i;
				nCount++;
				bFlag = TRUE;
			}

			if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 0 && bFlag)
			{
				bFlag = FALSE;
			}

		}

		if (nCount < 3 && FirstY < (int)(0.3*pLPCharImg->Height))
		{
			switch (LPNumType)
			{
			case LPNUM_NUM:

				*pCarSignID = 0;

				break;

			case LPNUM_ENNUM:

				*pCarSignID = 0;
				RecoAgain(pCarSignID, pLPCharImg, MatchNum, LPNumType);

				break;
			}
		}
		else 
		{
			nCount = 0;
			nAllCount = 0;
			for (i=0; i<(int)(0.1*pLPCharImg->Height+0.5); i++)
				for (j=0; j<(int)(0.2*pLPCharImg->Width+0.5); j++)
				{
					if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 255)
						nCount++;
					nAllCount++;
				}
			if (0 == nAllCount) break;
			if (nCount*1.0/nAllCount > 0.8)
			{
				switch (LPNumType)
				{
				case LPNUM_ENNUM:

					*pCarSignID = 'B'-'A'+10;

					break;
				}
			}
		}

		break;

	case 0: 

		if (MatchNum[0] == 0) break;
		if ((1.0*MatchNum['D'-'A'+10]-MatchNum[0])/MatchNum[0] > 0.20 &&
			 (1.0*MatchNum['Q'-'A'+10]-MatchNum[0])/MatchNum[0] > 0.20)
			break;

		nCount = 0;
		nAllCount = 0;
		for (i=0; i<(int)(0.15*pLPCharImg->Height+0.5); i++)
			for (j=0; j<(int)(0.3*pLPCharImg->Width+0.5); j++)
			{
				if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 255)
					nCount++;
				nAllCount++;
			}

		if (0 == nAllCount) break;
		if (nCount*1.0/nAllCount > 0.7)
		{
			switch (LPNumType)
			{
			case LPNUM_ENNUM:

				*pCarSignID = 'D'-'A'+10;

				break;
			}			
		}
		else 
		{
			nCount = 0;
			for (i=(int)(0.75*pLPCharImg->Height); i<pLPCharImg->Height; i++)
				for (j=(int)(0.5*pLPCharImg->Width); j<pLPCharImg->Width; j++)
				{
					if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 255)
						nCount++;
				}
			nAllCount = 0;
			for (i=(int)(0.75*pLPCharImg->Height); i<pLPCharImg->Height; i++)
				for (j=0; j<(int)(0.5*pLPCharImg->Width+0.5); j++)
				{
					if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 255)
						nAllCount++;
				}
			if (0 == nAllCount) break;
			if (nCount*1.0/nAllCount > 1.3)
			{
				switch (LPNumType)
				{
				case LPNUM_ENNUM:
					*pCarSignID = 'Q'-'A'+10;
					break;
				}
			}
		}

		break;

	case 'O'-'A'+10: 

		if (MatchNum['O'-'A'+10] == 0) break;
		if ((1.0*MatchNum['D'-'A'+10]-MatchNum['O'-'A'+10])/MatchNum['O'-'A'+10] > 0.20 &&
			 (1.0*MatchNum['Q'-'A'+10]-MatchNum['O'-'A'+10])/MatchNum['O'-'A'+10] > 0.20)
			break;

		nCount = 0;
		nAllCount = 0;
		for (i=0; i<(int)(0.1*pLPCharImg->Height+0.5); i++)
			for (j=0; j<(int)(0.2*pLPCharImg->Width+0.5); j++)
			{
				if (*(pLPCharImg->pImg+i*pLPCharImg->Width+j) == 255)
					nCount++;
				nAllCount++;
			}

		if (0 == nAllCount) break;
		if (nCount*1.0/nAllCount > 0.5)
		{
			switch (LPNumType)
			{
			case LPNUM_EN:

				*pCarSignID = 'D'-'A'+10;

				break;
			}			
		}
		else
		{
			nCount = 0;
			for (i=(int)(0.75*pLPCharImg->Height); i<pLPCharImg->Height; i++)
				for (j=(int)(0.5*pLPCharImg->Width); j<pLPCharImg->Width; j++)
				{
					nCount++;
				}
			nAllCount = 0;
			for (i=(int)(0.75*pLPCharImg->Height); i<pLPCharImg->Height; i++)
				for (j=0; j<(int)(0.5*pLPCharImg->Width+0.5); j++)
				{
					nAllCount++;
				}
			if (0 == nAllCount) break;
			if (nCount*1.0/nAllCount > 1.2)
			{
				switch (LPNumType)
				{
				case LPNUM_EN:
					*pCarSignID = 'Q'-'A'+10;
					break;
				}
			}
		}

		break;
		
	case 4:   
		
		if (MatchNum[4] == 0) break;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色呦呦国产精品| 国产丝袜在线精品| 国产成人免费在线| 午夜成人免费电影| 国产精品国产精品国产专区不片| 91久久久免费一区二区| 国产中文字幕精品| 午夜久久电影网| 最好看的中文字幕久久| 久久精品人人做人人综合 | 欧美日韩一区 二区 三区 久久精品| 黄网站免费久久| 午夜精彩视频在线观看不卡| 中文字幕一区av| 国产日韩av一区| 精品国产乱子伦一区| 56国语精品自产拍在线观看| 91美女福利视频| 国产激情偷乱视频一区二区三区| 日韩专区中文字幕一区二区| 亚洲精品国产第一综合99久久| 欧美高清在线精品一区| 久久免费午夜影院| 精品国产乱码久久久久久浪潮 | 国内精品在线播放| 毛片一区二区三区| 免费日本视频一区| 日韩av不卡在线观看| 亚洲成国产人片在线观看| 中文字幕在线视频一区| 国产欧美一区二区三区在线看蜜臀 | 亚洲一区中文日韩| 亚洲欧美国产三级| 最近中文字幕一区二区三区| 综合欧美亚洲日本| 亚洲精品乱码久久久久久黑人| 亚洲欧洲精品成人久久奇米网| 国产精品入口麻豆原神| 国产精品久久免费看| 国产精品麻豆99久久久久久| 亚洲国产精品成人综合色在线婷婷 | aaa国产一区| 国产成人免费视| 狠狠狠色丁香婷婷综合激情| 日本中文字幕一区二区视频 | 欧美图片一区二区三区| 97国产一区二区| kk眼镜猥琐国模调教系列一区二区| 激情综合色播激情啊| 亚洲视频一区二区在线| 国产精品蜜臀av| 国产精品网站在线观看| 欧美国产综合一区二区| 欧美国产欧美综合| 国产精品色在线观看| 国产精品九色蝌蚪自拍| 亚洲日本在线天堂| 亚洲亚洲人成综合网络| 亚洲gay无套男同| 男人的天堂亚洲一区| 国模娜娜一区二区三区| 亚洲国产欧美在线| 久久草av在线| 蜜臀久久久久久久| 国产最新精品免费| 成人动漫在线一区| 欧美中文字幕不卡| 欧美在线免费视屏| 日韩欧美亚洲另类制服综合在线| 日韩欧美在线观看一区二区三区| 日韩精品一区二区三区蜜臀 | 国产欧美精品区一区二区三区| 久久久91精品国产一区二区精品| 国产欧美一区二区精品婷婷 | 国产精品99久久久久久宅男| 国产成人免费在线观看| 91麻豆国产在线观看| 在线观看成人免费视频| 欧美日韩精品一区二区在线播放| 国产精品嫩草久久久久| 依依成人精品视频| 婷婷国产v国产偷v亚洲高清| 久久99国产精品久久99果冻传媒| 丰满少妇久久久久久久| 欧洲精品中文字幕| 欧美成人video| 欧美国产综合色视频| 亚洲一二三区不卡| 精品一区二区日韩| 色综合久久久久久久久| 欧美一区二区在线免费观看| 国产亚洲精品bt天堂精选| 一区二区三区**美女毛片| 久久国产精品99久久久久久老狼| 国产成人无遮挡在线视频| 91久久精品网| 欧美精品一区二区三区在线| 欧美一级爆毛片| 亚洲一区二区中文在线| 国产伦精品一区二区三区视频青涩| av在线这里只有精品| 天天综合天天综合色| 国产黄色精品视频| 国内精品不卡在线| 国产在线播精品第三| 色综合视频一区二区三区高清| 精品乱码亚洲一区二区不卡| 亚洲欧洲精品天堂一级| 狂野欧美性猛交blacked| 一本色道久久综合狠狠躁的推荐| 日韩一区二区三区四区| 亚洲国产激情av| 日韩av一区二区在线影视| 成人免费的视频| 日韩欧美一级在线播放| 一二三区精品视频| 成人av中文字幕| 欧美精品一区二区久久婷婷| 亚洲国产精品一区二区www在线| 福利91精品一区二区三区| 欧美大片在线观看一区| 国产精品久久久久影院| 久久精品国产在热久久| 欧美精品aⅴ在线视频| 国产亚洲成av人在线观看导航| 丝袜亚洲另类欧美综合| 欧美亚洲国产bt| 国产精品久久久一区麻豆最新章节| 国内成人免费视频| 精品久久久三级丝袜| 美国一区二区三区在线播放| 欧美日韩国产综合视频在线观看| 欧美xingq一区二区| 天天操天天色综合| 欧美一a一片一级一片| 国产精品国产自产拍高清av王其| 久久精品国产秦先生| 欧美一区日韩一区| 亚洲福利视频一区| 91国在线观看| 亚洲综合成人在线视频| 日韩av一级片| 国产婷婷一区二区| 欧美一区二区三区免费大片| 亚洲一区免费视频| 99这里只有久久精品视频| 久久影院午夜片一区| 久久av老司机精品网站导航| 69av一区二区三区| 日本欧美一区二区在线观看| www.av精品| 亚洲v中文字幕| 91国偷自产一区二区开放时间| 中文字幕永久在线不卡| 99re这里都是精品| 国产情人综合久久777777| 精品一区二区三区视频在线观看| 日韩欧美不卡一区| 国产在线精品一区二区夜色| 精品国产凹凸成av人网站| 国产麻豆一精品一av一免费| 国产亚洲一区二区三区| 成人av电影在线观看| 国产精品国产自产拍高清av| 在线视频亚洲一区| 婷婷综合五月天| 日韩欧美色综合网站| 国产精品1区二区.| 亚洲人成网站色在线观看| 日本韩国一区二区| 日本aⅴ亚洲精品中文乱码| 精品国产伦一区二区三区免费| 欧美电影影音先锋| 久久精品国产成人一区二区三区| 欧美怡红院视频| 美腿丝袜亚洲三区| 久久久99精品免费观看不卡| 99热精品一区二区| 天天操天天干天天综合网| 欧美大片日本大片免费观看| 成人性生交大片免费看在线播放| 亚洲最新视频在线观看| 欧美一级片免费看| 国产精品伊人色| 亚洲人精品一区| 欧美一区二区三区爱爱| 国产福利一区二区| 亚洲成在人线在线播放| 26uuu精品一区二区在线观看| 成人黄色国产精品网站大全在线免费观看| 亚洲欧美激情视频在线观看一区二区三区| 欧美日韩国产片| 国产91富婆露脸刺激对白| 亚洲午夜免费福利视频| 日韩一二三区视频| 成人免费福利片| 日韩电影在线观看电影| 中文字幕一区三区| 日韩一区二区电影在线| 91免费在线播放|