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

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

?? lprhelper.cpp

?? 能夠實現汽車的車牌定位并且最終識別車牌字符
?? CPP
字號:
/*
* 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-03
* 摘要:牌照識別的內部助手函數
*
* 當前版本:1.0
* 作者:try2it.com
* 開始日期:2003年09月27日
* 完成日期:2003年09月30日
*/
#include "stdafx.h"
#include <malloc.h>
#include <stdlib.h>
#include "../include/types.h"
#include "LPRHelper.h"

/*------------------------------------------------------------------
* 以下聲明全局變量
------------------------------------------------------------------*/
PMemNode g_pMemHead = NULL;  
PMemNode g_pMemTail = NULL;  
int g_nMemCount = 0;         

int LoadImgToArray(PColorImg pColorImg, BYTE *pImgBuff)
{
	BYTE *pData, *pColor;
	BYTE Y, Red, Blue, Green;
	BITMAPINFOHEADER Bi;
	RGBQUAD MyRGB;
	int res = 0;
	int i, j;

	WORD wLineBytes;

	memcpy(&Bi, pImgBuff, sizeof(BITMAPINFOHEADER));

	if ((res = ColorImg_Malloc(pColorImg, Bi.biWidth, Bi.biHeight))==0)
	{
		return 0;
	}
	
	pColorImg->BitCount = Bi.biBitCount;

	wLineBytes = (int)((Bi.biWidth * Bi.biBitCount + 31) / 32) * 4;
	Bi.biSizeImage = wLineBytes * Bi.biHeight;

	switch (Bi.biBitCount)
	{
	case 24:
		for (i=0; i<Bi.biHeight; i++)
		{
			pData = pImgBuff + sizeof(BITMAPINFOHEADER) + 
				          Bi.biClrUsed * sizeof(RGBQUAD) +
				        (Bi.biSizeImage - (WORD)(i + 1) * wLineBytes);

			for (j=0; j<Bi.biWidth; j++)
			{
				Blue = (BYTE)(*pData++);
				Green = (BYTE)(*pData++);
				Red = (BYTE)(*pData++);
				Y = (int)(0.299 * Red + 0.587 * Green+ 0.114 * Blue + 0.5);

				*(pColorImg->pBImg+i*Bi.biWidth+j) = Blue;
				*(pColorImg->pGImg+i*Bi.biWidth+j) = Green;
				*(pColorImg->pRImg+i*Bi.biWidth+j) = Red;
				*(pColorImg->pYImg+i*Bi.biWidth+j) = Y;
			}
		}

		break;

	case 16:

		break;

	case 8:
		for (i=0; i<Bi.biHeight; i++)
		{
			pColor = pImgBuff + sizeof(BITMAPINFOHEADER);
			pData = pImgBuff + sizeof(BITMAPINFOHEADER) + 
				        Bi.biClrUsed * sizeof(RGBQUAD) +
			 	        (Bi.biSizeImage - (WORD)(i + 1) * wLineBytes);

			for (j=0; j<Bi.biWidth; j++)
			{
				Y = *pData++;
				memcpy(&MyRGB, pColor + Y * sizeof(RGBQUAD), sizeof(RGBQUAD));
				
                Blue = MyRGB.rgbBlue;
				Green = MyRGB.rgbGreen;
				Red = MyRGB.rgbRed;
				Y = (int)(0.299 * Red + 0.587 * Green+ 0.114 * Blue + 0.5);
				*(pColorImg->pBImg+i*Bi.biWidth+j) = Blue;
				*(pColorImg->pGImg+i*Bi.biWidth+j) = Green;
				*(pColorImg->pRImg+i*Bi.biWidth+j) = Red;
				*(pColorImg->pYImg+i*Bi.biWidth+j) = Y;
			}
		}

		break;

	case 4:
		for (i=0; i<Bi.biHeight; i++)
		{
			pColor = pImgBuff + sizeof(BITMAPINFOHEADER);
			pData = pImgBuff + sizeof(BITMAPINFOHEADER) + 
				        Bi.biClrUsed * sizeof(RGBQUAD) +
			 	        (Bi.biSizeImage - (WORD)(i + 1) * wLineBytes);

			for (j=0; j<Bi.biWidth; j++)
			{
                if ((j != 0) && (j % 2 == 0))
	                pData++;

                Y = (BYTE)(*pData);
                Y = (BYTE)(Y >> (4 * ((j + 1) % 2)) & (BYTE)15);

				memcpy(&MyRGB, pColor + Y * sizeof(RGBQUAD), sizeof(RGBQUAD));
				
                Blue = MyRGB.rgbBlue;
				Green = MyRGB.rgbGreen;
				Red = MyRGB.rgbRed;
				Y = (int)(0.299 * Red + 0.587 * Green+ 0.114 * Blue + 0.5);

				*(pColorImg->pBImg+i*Bi.biWidth+j) = Blue;
				*(pColorImg->pGImg+i*Bi.biWidth+j) = Green;
				*(pColorImg->pRImg+i*Bi.biWidth+j) = Red;
				*(pColorImg->pYImg+i*Bi.biWidth+j) = Y;
			}
		}

		break;

	case 1:
		for (i=0; i<Bi.biHeight; i++)
		{
			pColor = pImgBuff + sizeof(BITMAPINFOHEADER);
			pData = pImgBuff + sizeof(BITMAPINFOHEADER) + 
				        Bi.biClrUsed * sizeof(RGBQUAD) +
			 	        (Bi.biSizeImage - (WORD)(i + 1) * wLineBytes);

			for (j=0; j<Bi.biWidth; j++)
			{
                if ((j != 0) && (j % 8 == 0))
					pData++;
                Y = (BYTE)(*pData);
                Y = BYTE(Y >> (7 - j % 8) & (BYTE)1);

				memcpy(&MyRGB, pColor + Y * sizeof(RGBQUAD), sizeof(RGBQUAD));
				
                Blue = MyRGB.rgbBlue;
				Green = MyRGB.rgbGreen;
				Red = MyRGB.rgbRed;
				Y = (int)(0.299 * Red + 0.587 * Green+ 0.114 * Blue + 0.5);
				*(pColorImg->pBImg+i*Bi.biWidth+j) = Blue;
				*(pColorImg->pGImg+i*Bi.biWidth+j) = Green;
				*(pColorImg->pRImg+i*Bi.biWidth+j) = Red;
				*(pColorImg->pYImg+i*Bi.biWidth+j) = Y;
			}
		}

		break;

	}	  

	return res;
}

int ColorImg_Malloc(PColorImg pColorImg, int Width, int Height)
{
	if (pColorImg == NULL)
		return 0;
	
	if (Width == 0 || Height == 0)
		return 0;

	pColorImg->pYImg = (BYTE*)malloc(Width * Height);
	if (pColorImg->pYImg == NULL)
		return 0;

	pColorImg->pRImg = (BYTE*)malloc(Width * Height);
	if (pColorImg->pRImg == NULL)
	{
		free(pColorImg->pYImg);
		return 0;
	}
	pColorImg->pBImg = (BYTE*)malloc(Width * Height);
	if (pColorImg->pBImg == NULL)
	{
		free(pColorImg->pYImg);
		free(pColorImg->pRImg);
		return 0;
	}
	pColorImg->pGImg = (BYTE*)malloc(Width * Height);
	if (pColorImg->pGImg == NULL)
	{
		free(pColorImg->pYImg);
		free(pColorImg->pRImg);
		free(pColorImg->pBImg);
		return 0;
	}

	if (_InsertMemNode(pColorImg->pYImg) == 0)
		return 0;
	if (_InsertMemNode(pColorImg->pRImg) == 0)
		return 0;
	if (_InsertMemNode(pColorImg->pGImg) == 0)
		return 0;
	if (_InsertMemNode(pColorImg->pBImg) == 0)
		return 0;

	pColorImg->Width = Width;
	pColorImg->Height = Height;

	return 1;
}

int GrayImg_Malloc(PGrayImg pGrayImg, int Width, int Height)
{
	if (pGrayImg == NULL)
		return 0;

	if (Width == 0 || Height == 0)
		return 0;
	
	pGrayImg->pImg = (BYTE*)malloc(Width * Height);
	if (pGrayImg->pImg == NULL)
		return 0;

	if (_InsertMemNode(pGrayImg->pImg) == 0)
		return 0;

	pGrayImg->Width = Width;
	pGrayImg->Height = Height;

	return 1;
}

int ColorImg_Free(PColorImg pColorImg)
{
	int res = 0;

	if (pColorImg == NULL)
		return 1;

	if (pColorImg->pYImg != NULL)
	{
		res = _FreeMemNode(pColorImg->pYImg);
	}
	if (pColorImg->pRImg != NULL)
	{
		res = _FreeMemNode(pColorImg->pRImg);
	}
	if (pColorImg->pGImg != NULL)
	{
		res = _FreeMemNode(pColorImg->pGImg);
	}
	if (pColorImg->pBImg != NULL)
	{
		res = _FreeMemNode(pColorImg->pBImg);
	}

	return res;
}

int GrayImg_Free(PGrayImg pGrayImg)
{
	int res = 0;

	if (pGrayImg == NULL)
		return 1;

	if (pGrayImg->pImg != NULL)
	{
		res = _FreeMemNode(pGrayImg->pImg);
	}

	return res;
}

int _InsertMemNode(BYTE *pMem)
{
	PMemNode pMemNode = NULL;

	pMemNode = (PMemNode)malloc(sizeof(MemNode));
	if (pMemNode == NULL)
	{
		return 0;
	}
	pMemNode->pMem = pMem;
	pMemNode->next = NULL;
	pMemNode->prev = NULL;

	if (g_pMemHead == NULL && g_pMemTail == NULL)
	{
		g_pMemHead = (PMemNode)malloc(sizeof(MemNode));
		g_pMemTail = (PMemNode)malloc(sizeof(MemNode));  
		
		g_pMemHead->next = g_pMemTail;
		g_pMemHead->prev = NULL;
		g_pMemHead->pMem = NULL;

		g_pMemTail->next = NULL;
		g_pMemTail->prev = g_pMemHead;
		g_pMemTail->pMem = NULL;
	}

	pMemNode->next = g_pMemTail;
	pMemNode->prev = g_pMemTail->prev;

	g_pMemTail->prev->next = pMemNode;
	g_pMemTail->prev = pMemNode;
	
	g_nMemCount++;

	return 1;
}

int _FreeMemNode(BYTE *pMem)
{
	PMemNode p;

	p = g_pMemTail->prev;

	while (p != g_pMemHead)
	{
		if (p->pMem == pMem)
		{
			p->prev->next = p->next;
			p->next->prev = p->prev;

			free(p);
			p = NULL;

			break;
		}
		p = p->prev;
	}

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

	g_nMemCount--;

	return 1;
}

int FreeAllMemNode()
{
	PMemNode p,	q;

	if (g_pMemTail==NULL || g_pMemHead==NULL)
		return 1;

	p = g_pMemTail->prev;

	while (p != g_pMemHead)
	{
		if (p->pMem)
		{
			free(p->pMem);
			p->pMem = NULL;
		}
        q = p;
		p = p->prev;
		free(q);
		q = NULL;

		g_nMemCount--;
	}

	if (g_pMemTail != NULL)
	{
		free(g_pMemTail);
		g_pMemTail = NULL;
	}
	if (g_pMemHead != NULL)
	{
		free(g_pMemHead);
		g_pMemHead = NULL;
	}

	return 1;
}

int ShowImg(HDC hdc, PColorImg pColorImg)
{
	BITMAPINFOHEADER Bi;
	BYTE *pImgBuff = NULL;
	BYTE *pData = NULL;
	WORD wLineBytes;
	int i, j;
	BOOL bSuccess;
	RECT rect;

	Bi.biSize = sizeof(BITMAPINFOHEADER);
    Bi.biWidth = pColorImg->Width;
    Bi.biHeight = pColorImg->Height;
    Bi.biPlanes = 1;
    Bi.biBitCount = 24;
    Bi.biCompression = 0;
    Bi.biClrUsed = 0;
    Bi.biClrImportant = 0;
	wLineBytes = (int)((Bi.biWidth * Bi.biBitCount+31) / 32) * 4;
	Bi.biSizeImage = wLineBytes*Bi.biHeight;
	
	pImgBuff = (BYTE*)malloc(Bi.biSizeImage + sizeof(BITMAPINFOHEADER));
	pData = pImgBuff;
	memcpy(pData, &Bi, sizeof(BITMAPINFOHEADER));
	for (i=0; i<pColorImg->Height-1; i++)
	{
		pData = pImgBuff + sizeof(BITMAPINFOHEADER) +
			       (Bi.biSizeImage - (WORD)(1 + i) * wLineBytes);

		for (j=0; j<pColorImg->Width-1; j++)
		{
			*pData++ = *(pColorImg->pBImg + i * pColorImg->Width + j);
			*pData++ = *(pColorImg->pGImg + i * pColorImg->Width + j);
			*pData++ = *(pColorImg->pRImg + i * pColorImg->Width + j);
		}
	}
	pData = pImgBuff + sizeof(BITMAPINFOHEADER);
	
	rect.left = 0;
	rect.top = 0;
	rect.right = 200;
	rect.bottom = 400;

	FillRect(hdc, &rect, (HBRUSH) (COLOR_WINDOW));
	bSuccess = SetDIBitsToDevice(hdc,                    // HDC
		                         0,                      // DestX
            				     0,                      // DestY
					             pColorImg->Width,       // DestWidth
					             pColorImg->Height,      // DestHeight
					             0,                      // SrcX
					             0,                      // SrcY
					             0,                      // StartScan
					             pColorImg->Height,      // NumScans
                                 pData,                  // Bits
					             (LPBITMAPINFO)pImgBuff, // BitsInfo
					             DIB_RGB_COLORS);        // wUsage

	if (pImgBuff)
		free(pImgBuff);
						  
	return (int)bSuccess;
}

TGrayImg ColorToGray(TColorImg ColorImg)
{
	TGrayImg GrayImg;

	GrayImg.Width = ColorImg.Width;
	GrayImg.Height = ColorImg.Height;
	GrayImg.pImg = ColorImg.pYImg;

	return GrayImg;
}


TColorImg GrayToColor(TGrayImg GrayImg)
{
	TColorImg ColorImg;

	ColorImg.Width = GrayImg.Width;
	ColorImg.Height = GrayImg.Height;
	ColorImg.pYImg = GrayImg.pImg;
	ColorImg.pRImg = GrayImg.pImg;
	ColorImg.pGImg = GrayImg.pImg;
	ColorImg.pBImg = GrayImg.pImg;

	return ColorImg;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美猛男gaygay网站| 一本大道av一区二区在线播放| 波多野结衣中文字幕一区二区三区| 91精品国产综合久久久蜜臀图片 | 亚洲成a人v欧美综合天堂下载 | 日韩一级精品视频在线观看| 亚洲欧美综合网| 国产乱码字幕精品高清av| 欧美一区二区国产| 天天射综合影视| 欧美乱妇23p| 日韩成人午夜电影| 91精品国产综合久久婷婷香蕉 | 亚洲国产精品成人综合| 色哟哟一区二区在线观看| 国产精品网站导航| 高清久久久久久| 亚洲国产成人午夜在线一区| 成人黄色国产精品网站大全在线免费观看| 欧美综合亚洲图片综合区| 一区二区在线观看免费视频播放| 在线观看区一区二| 天天色综合天天| 欧美不卡123| 粉嫩一区二区三区性色av| 精品国产成人在线影院| 国产精品2024| 亚洲人吸女人奶水| 欧美久久久久免费| 九九九久久久精品| 国产精品无遮挡| 成人精品国产福利| 亚洲午夜久久久久久久久久久| 欧美高清dvd| 国内精品国产成人| 国产欧美中文在线| 91老师片黄在线观看| 亚洲一区二区在线免费看| 欧美精品三级在线观看| 激情综合色综合久久综合| 久久精品人人做| 在线影院国内精品| 精彩视频一区二区| 国产精品免费视频观看| 欧美性猛片aaaaaaa做受| 捆绑调教一区二区三区| 国产情人综合久久777777| 一本到不卡免费一区二区| 偷拍日韩校园综合在线| 久久亚洲精华国产精华液| 91免费视频网| 精品午夜久久福利影院| 亚洲欧美在线aaa| 日韩一二三区不卡| 91麻豆高清视频| 国产一区二区三区久久久| 一区二区三区中文字幕电影| 欧美va亚洲va国产综合| 国产成人免费网站| 日韩精品三区四区| 亚洲乱码日产精品bd| 久久免费看少妇高潮| 在线免费精品视频| 岛国精品在线观看| 日韩福利电影在线| 最新中文字幕一区二区三区 | 99久免费精品视频在线观看| 日精品一区二区| 亚洲男人的天堂av| 中文字幕av一区二区三区高| 欧美一级黄色录像| 欧美人伦禁忌dvd放荡欲情| 成人高清视频在线| 国内一区二区在线| 秋霞成人午夜伦在线观看| 国产精品―色哟哟| 久久久久久夜精品精品免费| 欧美精品久久一区二区三区| 色香蕉成人二区免费| 91日韩一区二区三区| 美女精品自拍一二三四| 洋洋成人永久网站入口| 最新成人av在线| 欧美经典三级视频一区二区三区| 欧美写真视频网站| 成人黄色777网| 国产成a人亚洲精品| 韩国视频一区二区| 狠狠狠色丁香婷婷综合激情 | 国产美女一区二区三区| 久久97超碰色| 麻豆国产精品777777在线| 丝袜美腿一区二区三区| 水野朝阳av一区二区三区| 亚洲男人的天堂在线观看| 最近中文字幕一区二区三区| 久久精品欧美日韩精品| 国产午夜亚洲精品理论片色戒| 精品成人私密视频| 精品电影一区二区三区| 精品乱人伦小说| 久久久国际精品| 久久免费电影网| 中文字幕国产一区二区| 国产欧美一区二区精品久导航| 国产香蕉久久精品综合网| 中国av一区二区三区| 中文字幕不卡的av| 亚洲女爱视频在线| 亚洲综合清纯丝袜自拍| 性欧美大战久久久久久久久| 天堂蜜桃一区二区三区| 性久久久久久久久久久久| 蜜桃视频在线观看一区| 国产在线播放一区二区三区| 成+人+亚洲+综合天堂| 欧美精品在线观看播放| 日本一区二区在线不卡| 亚洲欧美区自拍先锋| 免费高清不卡av| 91片在线免费观看| 精品欧美黑人一区二区三区| 亚洲国产精品精华液ab| 日本午夜一本久久久综合| 成人不卡免费av| 欧美一二三区精品| 亚洲婷婷综合色高清在线| 奇米四色…亚洲| 91免费看`日韩一区二区| 26uuu亚洲综合色| 亚洲一区成人在线| 丰满白嫩尤物一区二区| 日韩一级二级三级精品视频| 亚洲激情男女视频| 国产91富婆露脸刺激对白| 3d动漫精品啪啪1区2区免费 | 欧美成人一区二区三区| 中文字幕字幕中文在线中不卡视频| 美女诱惑一区二区| 色播五月激情综合网| 国产亚洲欧美日韩日本| 美国一区二区三区在线播放| 色哟哟日韩精品| 国产精品电影一区二区三区| 国产一区三区三区| 制服丝袜亚洲播放| 亚洲国产视频一区| 91麻豆视频网站| 国产精品国模大尺度视频| 国产在线精品一区二区三区不卡 | 99热99精品| 国产日韩欧美精品电影三级在线| 日韩av电影免费观看高清完整版| 在线免费亚洲电影| 一区二区三区中文字幕| 91日韩精品一区| 最近中文字幕一区二区三区| 成人激情动漫在线观看| 国产日韩欧美不卡在线| 国产一区二区在线影院| 精品日韩成人av| 久久精品国产久精国产爱| 日韩一区二区精品| 日av在线不卡| 欧美精品久久久久久久久老牛影院| 亚洲一区在线看| 色成年激情久久综合| 亚洲永久免费av| 欧美色区777第一页| 亚洲一区二区精品3399| 欧美日韩在线三区| 日韩中文字幕av电影| 欧美一级搡bbbb搡bbbb| 日本不卡在线视频| 欧美成人性战久久| 国产成人精品网址| 国产精品久久久一区麻豆最新章节| 成人av在线播放网址| 亚洲免费观看高清完整版在线| 91女人视频在线观看| 亚洲国产欧美一区二区三区丁香婷| 欧美日韩国产一区| 免费在线看成人av| 久久夜色精品国产噜噜av| 国产一区二区伦理| 中文字幕欧美三区| 在线视频观看一区| 日本中文字幕一区| 国产亚洲一区字幕| 一本在线高清不卡dvd| 亚洲午夜三级在线| 精品久久久久久亚洲综合网 | 免费高清视频精品| 国产视频在线观看一区二区三区| 成人黄色小视频| 亚洲午夜激情av| 久久伊人蜜桃av一区二区| 97久久精品人人做人人爽| 午夜精品aaa| 久久一区二区三区四区|