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

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

?? quantize.cpp

?? 車牌定位c++源碼,本人編輯的地方車輛號牌識別.
?? CPP
字號:
#include "stdafx.h"
#include <windows.h>
#include "Quantize.h"
/////////////////////////////////////////////////////////////////////////////
CQuantizer::CQuantizer (UINT nMaxColors, UINT nColorBits)
{
	m_nColorBits = nColorBits < 8 ? nColorBits : 8;

	m_pTree	= NULL;
	m_nLeafCount = 0;
	for	(int i=0; i<=(int) m_nColorBits; i++)
		m_pReducibleNodes[i] = NULL;
	m_nMaxColors = nMaxColors;
}
/////////////////////////////////////////////////////////////////////////////
CQuantizer::~CQuantizer	()
{
	if (m_pTree	!= NULL)
		DeleteTree (&m_pTree);
}
/////////////////////////////////////////////////////////////////////////////
BOOL CQuantizer::ProcessImage (HANDLE hImage)
{
	BYTE r,	g, b;
	int	i, j;

	BITMAPINFOHEADER ds;
	memcpy(&ds,hImage, sizeof(ds));
	int effwdt = ((((ds.biBitCount * ds.biWidth ) + 31) / 32) * 4);

	int	nPad = effwdt - (((ds.biWidth *	ds.biBitCount) + 7) / 8);

	BYTE* pbBits = (BYTE*)hImage + *(LPDWORD)hImage;

	switch (ds.biBitCount) {

	case 1:	// 1-bit DIB
	case 4:	// 4-bit DIB
	case 8:	// 8-bit DIB
		for	(i=0; i<ds.biHeight;	i++) {
			for	(j=0; j<ds.biWidth; j++)	{
				BYTE idx=GetPixelIndex(j,i,ds.biBitCount,effwdt,pbBits);
				BYTE* pal = (BYTE*)(hImage) + sizeof(BITMAPINFOHEADER);
				long ldx = idx*sizeof(RGBQUAD);
				b = pal[ldx++];
				g = pal[ldx++];
				r = pal[ldx];
				AddColor (&m_pTree,	r, g, b, m_nColorBits, 0, &m_nLeafCount,
					m_pReducibleNodes);
				while (m_nLeafCount	> m_nMaxColors)
					ReduceTree (m_nColorBits, &m_nLeafCount,
						m_pReducibleNodes);
			}
		}

		break;
	case 24: //	24-bit DIB
		for	(i=0; i<ds.biHeight;	i++) {
			for	(j=0; j<ds.biWidth; j++)	{
				b =	*pbBits++;
				g =	*pbBits++;
				r =	*pbBits++;
				AddColor (&m_pTree,	r, g, b, m_nColorBits, 0, &m_nLeafCount,
					m_pReducibleNodes);
				while (m_nLeafCount	> m_nMaxColors)
					ReduceTree (m_nColorBits, &m_nLeafCount, m_pReducibleNodes);
			}
			pbBits += nPad;
		}
		break;

	default: //	Unrecognized color format
		return FALSE;
	}
	return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
void CQuantizer::AddColor (NODE** ppNode, BYTE r, BYTE g, BYTE b,
	UINT nColorBits, UINT nLevel, UINT*	pLeafCount,	NODE** pReducibleNodes)
{
	static BYTE	mask[8]	= {	0x80, 0x40,	0x20, 0x10,	0x08, 0x04,	0x02, 0x01 };

	// If the node doesn't exist, create it.
	if (*ppNode	== NULL)
		*ppNode	= (NODE*)CreateNode (nLevel, nColorBits, pLeafCount, pReducibleNodes);

	// Update color	information	if it's	a leaf node.
	if ((*ppNode)->bIsLeaf)	{
		(*ppNode)->nPixelCount++;
		(*ppNode)->nRedSum += r;
		(*ppNode)->nGreenSum +=	g;
		(*ppNode)->nBlueSum	+= b;
	} else {	// Recurse a level deeper if the node is not a leaf.
		int	shift =	7 -	nLevel;
		int	nIndex =(((r & mask[nLevel]) >> shift) << 2) |
					(((g & mask[nLevel]) >>	shift) << 1) |
					(( b & mask[nLevel]) >> shift);
		AddColor (&((*ppNode)->pChild[nIndex]),	r, g, b, nColorBits,
					nLevel + 1,	pLeafCount,	pReducibleNodes);
	}
}
/////////////////////////////////////////////////////////////////////////////
void* CQuantizer::CreateNode (UINT nLevel, UINT	nColorBits,	UINT* pLeafCount,
	NODE** pReducibleNodes)
{
	NODE* pNode = (NODE*)calloc(1,sizeof(NODE));

	if (pNode== NULL) return NULL;

	pNode->bIsLeaf = (nLevel ==	nColorBits)	? TRUE : FALSE;
	if (pNode->bIsLeaf) (*pLeafCount)++;
	else {
		pNode->pNext = pReducibleNodes[nLevel];
		pReducibleNodes[nLevel]	= pNode;
	}
	return pNode;
}
/////////////////////////////////////////////////////////////////////////////
void CQuantizer::ReduceTree	(UINT nColorBits, UINT*	pLeafCount,
	NODE** pReducibleNodes)
{
	// Find	the	deepest	level containing at	least one reducible	node.
	for	(int i=nColorBits -	1; (i>0) &&	(pReducibleNodes[i]	== NULL); i--);

	// Reduce the node most	recently added to the list at level	i.
	NODE* pNode	= pReducibleNodes[i];
	pReducibleNodes[i] = pNode->pNext;

	UINT nRedSum = 0;
	UINT nGreenSum = 0;
	UINT nBlueSum =	0;
	UINT nChildren = 0;

	for	(i=0; i<8; i++)	{
		if (pNode->pChild[i] !=	NULL) {
			nRedSum	+= pNode->pChild[i]->nRedSum;
			nGreenSum += pNode->pChild[i]->nGreenSum;
			nBlueSum +=	pNode->pChild[i]->nBlueSum;
			pNode->nPixelCount += pNode->pChild[i]->nPixelCount;
			free(pNode->pChild[i]);
			pNode->pChild[i] = NULL;
			nChildren++;
		}
	}

	pNode->bIsLeaf = TRUE;
	pNode->nRedSum = nRedSum;
	pNode->nGreenSum = nGreenSum;
	pNode->nBlueSum	= nBlueSum;
	*pLeafCount	-= (nChildren -	1);
}
/////////////////////////////////////////////////////////////////////////////
void CQuantizer::DeleteTree	(NODE**	ppNode)
{
	for	(int i=0; i<8; i++)	{
		if ((*ppNode)->pChild[i] !=	NULL) DeleteTree (&((*ppNode)->pChild[i]));
	}
	free(*ppNode);
	*ppNode	= NULL;
}
/////////////////////////////////////////////////////////////////////////////
void CQuantizer::GetPaletteColors (NODE* pTree,	RGBQUAD* prgb, UINT* pIndex)
{
	if (pTree){
		if (pTree->bIsLeaf)	{
			prgb[*pIndex].rgbRed = (BYTE)((pTree->nRedSum)/(pTree->nPixelCount));
			prgb[*pIndex].rgbGreen = (BYTE)((pTree->nGreenSum)/(pTree->nPixelCount));
			prgb[*pIndex].rgbBlue = (BYTE)((pTree->nBlueSum)/(pTree->nPixelCount));
			prgb[*pIndex].rgbReserved =	0;
			(*pIndex)++;
		} else {
			for	(int i=0; i<8; i++)	{
				if (pTree->pChild[i] !=	NULL)
					GetPaletteColors (pTree->pChild[i],	prgb, pIndex);
			}
		}
	}
}
/////////////////////////////////////////////////////////////////////////////
UINT CQuantizer::GetColorCount ()
{
	return m_nLeafCount;
}
/////////////////////////////////////////////////////////////////////////////
void CQuantizer::SetColorTable (RGBQUAD* prgb)
{
	UINT nIndex	= 0;
	GetPaletteColors (m_pTree, prgb, &nIndex);
}
/////////////////////////////////////////////////////////////////////////////
BYTE CQuantizer::GetPixelIndex(long x, long y, int nbit, long effwdt, BYTE *pimage)
{
	if (nbit==8){
		return pimage[y*effwdt + x];
	} else {
		BYTE pos;
		BYTE iDst= pimage[y*effwdt + (x*nbit >> 3)];
		if (nbit==4){
			pos = 4*(1-x%2);
			iDst &= (0x0F<<pos);
			return iDst >> pos;
		} else if (nbit==1){
			pos = 7-x%8;
			iDst &= (0x01<<pos);
			return iDst >> pos;
		}
	}
	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产成人在线影院 | 日韩一级二级三级| 亚洲成人免费视| 欧美日韩免费观看一区二区三区| 亚洲精品乱码久久久久| 欧美在线不卡视频| 日韩国产精品久久| 精品国产麻豆免费人成网站| 国模大尺度一区二区三区| 国产欧美视频一区二区三区| 91香蕉视频污| 午夜精品久久一牛影视| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品一区在线观看你懂的| 国产精品精品国产色婷婷| 欧美在线啊v一区| 久久国产婷婷国产香蕉| 国产精品国产三级国产专播品爱网| 欧美亚洲一区三区| 精一区二区三区| 中文字幕亚洲一区二区va在线| 在线看不卡av| 国产一区二区三区| 亚洲男同性视频| 精品乱人伦一区二区三区| 成人app软件下载大全免费| 天堂成人国产精品一区| 国产亚洲欧美一级| 色美美综合视频| 国产在线看一区| 亚洲图片欧美一区| 国产日韩欧美a| 欧美美女一区二区在线观看| 国产一区不卡精品| 亚洲国产精品久久久久婷婷884| 精品欧美黑人一区二区三区| 色综合色综合色综合| 日本美女视频一区二区| 国产精品国产三级国产普通话99 | 综合av第一页| 精品久久久久久久久久久久久久久久久| 成人免费毛片a| 日产精品久久久久久久性色| 18欧美亚洲精品| 日韩欧美高清一区| 欧美在线一区二区| 成人短视频下载| 国产毛片一区二区| 日韩一区精品字幕| 亚洲愉拍自拍另类高清精品| 国产欧美一区二区三区在线老狼| 欧美高清精品3d| 色综合久久九月婷婷色综合| 国产91精品欧美| 久久国产人妖系列| 蜜臀久久99精品久久久画质超高清| 亚洲色图色小说| 中文字幕在线一区二区三区| 精品国产伦一区二区三区观看体验 | 精品99久久久久久| 91.com在线观看| 欧美三级中文字| 一本色道久久加勒比精品| 成人午夜激情在线| 国产风韵犹存在线视精品| 久久成人18免费观看| 日韩精品成人一区二区在线| 亚洲精选视频在线| 亚洲私人影院在线观看| 一区免费观看视频| 亚洲天堂免费看| 亚洲丝袜制服诱惑| 国产精品成人在线观看| 国产精品天美传媒| 日本一区二区三区dvd视频在线| 亚洲精品一线二线三线| 久久综合成人精品亚洲另类欧美 | 国产成人综合精品三级| 蜜臀av性久久久久蜜臀av麻豆 | 精品亚洲porn| 麻豆91在线看| 精品一区二区影视| 狠狠色狠狠色综合| 激情偷乱视频一区二区三区| 日韩不卡免费视频| 狠狠色丁香婷综合久久| 狠狠网亚洲精品| 粉嫩久久99精品久久久久久夜| 风间由美一区二区av101| 丁香亚洲综合激情啪啪综合| 粉嫩绯色av一区二区在线观看| 国产成人综合精品三级| av一区二区三区黑人| 欧洲精品一区二区| 欧美一区二区视频网站| 久久这里只有精品首页| 国产精品美女视频| 亚洲一区二区偷拍精品| 日本不卡一二三| 国产成人在线视频网站| 色悠久久久久综合欧美99| 欧美日韩国产经典色站一区二区三区| 欧美一卡二卡在线观看| 久久精品水蜜桃av综合天堂| 中文字幕一区二区在线播放| 亚洲一区影音先锋| 国产又黄又大久久| 一本一道久久a久久精品| 51久久夜色精品国产麻豆| 久久久美女毛片| 一二三区精品视频| 国产在线视频精品一区| 色综合天天视频在线观看| 欧美一区二区三区四区五区| 久久久亚洲精品石原莉奈| 一区二区三区欧美| 精品一区二区日韩| 色天天综合色天天久久| 欧美v日韩v国产v| 亚洲免费在线视频一区 二区| 日韩激情av在线| 国产91精品露脸国语对白| 欧美日韩国产小视频在线观看| 国产亚洲一区字幕| 亚洲午夜影视影院在线观看| 国产精品综合久久| 欧美色精品在线视频| 久久女同精品一区二区| 亚洲国产一区二区三区| 成人免费高清在线| 91精品在线免费| 亚洲精品自拍动漫在线| 国产毛片精品视频| 欧美福利视频一区| ●精品国产综合乱码久久久久| 美女视频网站久久| 91黄视频在线观看| 国产精品女主播av| 精品综合久久久久久8888| 欧美亚男人的天堂| 中文字幕一区二区三中文字幕| 久久国产精品第一页| 欧美视频你懂的| 综合久久久久久| 福利视频网站一区二区三区| 欧美一级高清片| 亚洲va国产天堂va久久en| 播五月开心婷婷综合| 久久亚洲春色中文字幕久久久| 午夜精品久久久| 欧美四级电影网| 亚洲精品中文在线| 99精品视频在线免费观看| 久久人人爽人人爽| 国产一区二区不卡在线| 7777精品伊人久久久大香线蕉| 亚洲裸体xxx| 99国产精品国产精品久久| 久久久久久久久免费| 黄色小说综合网站| 日韩三区在线观看| 青青草国产成人av片免费| 欧美午夜理伦三级在线观看| 亚洲免费在线观看视频| 91色视频在线| 亚洲色图视频网站| 91福利在线播放| 亚洲精品视频在线看| 91同城在线观看| 日韩伦理免费电影| 色综合色综合色综合色综合色综合| 中文成人综合网| www.一区二区| 中文字幕亚洲综合久久菠萝蜜| 菠萝蜜视频在线观看一区| 亚洲日本在线观看| 91美女片黄在线| 一区二区三区在线视频观看 | 中文字幕一区二区三区乱码在线| 国产999精品久久久久久绿帽| 久久久久久99久久久精品网站| 国产一区二区免费看| 国产丝袜美腿一区二区三区| 成人免费视频免费观看| 自拍偷拍国产精品| 欧美视频日韩视频在线观看| 日韩国产成人精品| 精品国产1区二区| 国产在线国偷精品产拍免费yy| 久久精品一区二区三区四区| 国产999精品久久| 亚洲你懂的在线视频| 欧美久久久久久久久中文字幕| 美女脱光内衣内裤视频久久影院| 欧美哺乳videos| 不卡av在线免费观看| 亚洲h在线观看| 26uuu另类欧美| 91视频精品在这里| 亚洲成a天堂v人片|