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

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

?? dib.cpp

?? 人臉檢測系統---可以較好的實現人臉定位
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
			//判斷Cr分量的數值,并修改標志
			 cmap =  cr- 144  ;
			if(cmap <=-2 || cmap>= 2)
			{
				lab = false;
				
			}
			//根據標志設定圖像顏色
			if(lab)
				cmap = 255;
			else
				cmap = 0;
			//保存圖象顏色
			*(lpRgb + lOffset++) = cmap;
			*(lpRgb + lOffset++) = cmap;
			*(lpRgb + lOffset++) = cmap;
		}
	
}

void DIB::EyeMapb(LPBYTE lpRgb, const LPBYTE lpYcc,  WORD wBytesPerLine, CRect faceLocation)
{
	long lOffset;
	int cr;
	int cb;

	for(int i=faceLocation.top; i<=faceLocation.bottom; i++)
		for (int j=faceLocation.left; j<=faceLocation.right; j++)
		{
			lOffset = PixelOffset(i, j, wBytesPerLine);
			cb = *(lpYcc + lOffset +2);
		

			*(lpRgb + lOffset++) = cb;
			*(lpRgb + lOffset++) = cb;
			*(lpRgb + lOffset++) = cb;
		}
	
}

void DIB::EyeMapR(LPBYTE lpRgb, const LPBYTE lpYcc,  WORD wBytesPerLine, CRect faceLocation)
{
	long lOffset;
	int cr;
	int cb;

	for(int i=faceLocation.top; i<=faceLocation.bottom; i++)
		for (int j=faceLocation.left; j<=faceLocation.right; j++)
		{
			lOffset = PixelOffset(i, j, wBytesPerLine);
			cr = *(lpYcc + lOffset +1);
			cb = *(lpYcc + lOffset +2);
		
			
			*(lpRgb + lOffset++) = cr;
			*(lpRgb + lOffset++) = cr;
			*(lpRgb + lOffset++) = cr;
		}
	
}

void DIB::ErasionFalseArea(HANDLE hDIB)
{
	int PixelNum[255];
	LPBITMAPINFOHEADER lpbi;
	int width;
	int height;
	LPBYTE lpData;
	WORD wBytesPerLine;
	long lOffset;
	//得到長寬信息
	lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
	height = lpbi->biHeight;
	width  = lpbi->biWidth;
	//得到數據區指針和每行字節數
	lpData = FindDIBBits(hDIB);
	wBytesPerLine = BytePerLine(hDIB);
	//初始化象素累計數組
	for (int i=0; i<255; i++)
	{
		PixelNum[i] = 0;
	}
	
	int calNum =1;
	for (i=0; i<height; i++)
		for (int j=0; j<width; j++)
		{
			lOffset = PixelOffset(i,j,wBytesPerLine);
			//如果象素為白色
			if (*(lpData + lOffset)==255)
			{	
				//遞歸統計該區域連續的白色點象素點個數
				RecursiveCal(lpData, i,j,wBytesPerLine, PixelNum[calNum],calNum);
				calNum++;
			}
		}
		
		for (i=0; i<calNum; i++)
		{	
			//如果象素點個數小于一定數目則把這個標志設置為0
			if (PixelNum[i] < AREAPIXEL)
			{
				PixelNum[i] = 0;
			}
		}
		//下面的循環根據標志數組來最終設定圖象的顏色
		for(i=0; i<height; i++)
			for (int j=0; j<width; j++)
			{
				lOffset = PixelOffset( i,j,wBytesPerLine);
				int num = *(lpData + lOffset);
				//如果當前點不是黑色點
				if(num != 0)
				{	
					//如果標志數組為0,則設置為黑色
					if(PixelNum[num] == 0)
					{
						*(lpData+lOffset++) =0;
						*(lpData+lOffset++) =0;
						*(lpData+lOffset++) =0;
					}
					//否則設置為白色
					else
					{
						*(lpData+lOffset++) =255;
						*(lpData+lOffset++) =255;
						*(lpData+lOffset++) =255;
					}
				}
			}
}


void DIB::RecursiveCal(LPBYTE lpData, int y, int x, WORD wBytesPerLine, int &pixelNum, int num)
{	
	long lOffset;
	
	lOffset = PixelOffset(y,x,wBytesPerLine);
	//如果當前點為白色點
	if(*(lpData+lOffset) == 255)
	{	
		//把當前點大小設置成為序號值
		*(lpData+lOffset++) = num;
		*(lpData+lOffset++) = num;
		*(lpData+lOffset++) = num;
		//象素個數加一
		pixelNum++;
	
	int tempx;
	int tempy;
	
	//遞歸當前點上面的點
	tempy = y-1;
	tempx = x;
	RecursiveCal(lpData,tempy,tempx,wBytesPerLine,pixelNum,num);
	
	//下面的點
	tempy = y+1;
	tempx = x;
	RecursiveCal(lpData,tempy,tempx,wBytesPerLine,pixelNum,num);
	
	//左邊的點
	tempy = y;
	tempx = x-1;
	RecursiveCal(lpData,tempy,tempx,wBytesPerLine,pixelNum,num);
	//右邊的點
	tempy = y;
	tempx = x+1;
	RecursiveCal(lpData,tempy,tempx,wBytesPerLine,pixelNum,num);
	
	}

}

void DIB::eyeMap(LPBYTE lpResult, bool eyemapc[][ImgRange], bool eyemapl[][ImgRange], bool lab[][ImgRange], WORD wBytesPerLine, CRect faceLocation)
{	
	long lOffset;
	//根據得到的亮度和色度信息對眼睛進行綜合匹配
	for(int i=faceLocation.top; i<=faceLocation.bottom; i++)
		for (int j=faceLocation.left; j<faceLocation.right; j++)
		{
			lOffset = PixelOffset(i, j, wBytesPerLine);
			//如果當前點的亮度和色度匹配都為真,并且在人臉區域內
			//就設置為白色,否則設置為黑色
			if((eyemapc[i][j]) && (eyemapl[i][j]) && lab[i][j])
			{
				*(lpResult + lOffset++) = 255;
				*(lpResult + lOffset++) = 255;
				*(lpResult + lOffset++) = 255;
			}

			else
			{
				*(lpResult + lOffset++) = 0;
				*(lpResult + lOffset++) = 0;
				*(lpResult + lOffset++) = 0;
			}
		}
}

void DIB::EyeMapL(LPBYTE lpRgb, WORD wBytesPerLine, CRect faceLocation)
{
	int r;
	int g;
	int b;
	int gray ;
	long lOffset;
	//下面的循環實現眼睛的亮度匹配
	for (int i=faceLocation.top; i<=faceLocation.bottom; i++)
		for (int j=faceLocation.left; j<=faceLocation.right; j++)
		{
			lOffset = PixelOffset(i, j, wBytesPerLine);
			//得到rgb值
			b = *(lpRgb + lOffset);
			g = *(lpRgb + lOffset+1);
			r = *(lpRgb + lOffset+2);
			//計算得到灰度
			gray = (r*10+g*30+b*60)/100;
			//根據眼睛的亮度區域來設定圖象的數值
			if(100<gray && 125>gray)
				gray =255;
			else
				gray = 0;
			*(lpRgb + lOffset++) = gray;
			*(lpRgb + lOffset++) = gray;
			*(lpRgb + lOffset++) = gray;
		}
}

void  DIB::RgbtoYcb(HANDLE hDIB, LPBYTE lpYcb)
{
	LPBITMAPINFOHEADER lpbi;
	int width,height;
	WORD wBytesPerLine;
	LPBYTE lpData;
	lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
	//得到圖象的基本信息
	width = lpbi->biWidth;
	height = lpbi->biHeight;
	lpData = FindDIBBits(hDIB);
	wBytesPerLine = BytePerLine(hDIB);

	long lOffset;
	//下面的循環實現從rgb到ycc的轉化
	for(int i=0;i<height;i++)
		for(int j=0;j<width;j++)
		{
				lOffset = PixelOffset(i,j,wBytesPerLine);
				//得到rgb數值
				int b = *(lpData + lOffset);
				int g = *(lpData + lOffset+1);
				int r = *(lpData + lOffset+2);
				//計算得到y,cr,cb的數值
				int Y = (257*r+504*g+98*b)/1000+16;
				int Cr = (439*r-368*g-71*b)/1000+128;
				int Cb = (-148*r-291*g+439*b)/1000+128;
				//保存計算得到的數值
				*(lpYcb+lOffset++) = Y;
				*(lpYcb+lOffset++) = Cr;
				*(lpYcb+lOffset++) = Cb;

		}
		GlobalUnlock(hDIB);

}

void DIB::Erasion(HANDLE hDIB)
{
	LPBITMAPINFOHEADER lpbi;
	LPBYTE lpData;
	WORD wBytesPerLine;
	long lOffset;
	long lOffsetJudge;
	int height;
	int width;
	
	//得到基本數據
	lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
	height = lpbi->biHeight;
	width = lpbi->biWidth;
	wBytesPerLine = BytePerLine(hDIB);
	lpData = FindDIBBits(hDIB);
	
	HANDLE hTempDIB;
	LPBYTE lpTemp;
	//申請同樣大小的內存
	hTempDIB =   GlobalAlloc(GMEM_MOVEABLE,(DWORD)(sizeof(BITMAPINFOHEADER) + wBytesPerLine*height));
	//判斷內存情況
	if(!hTempDIB)
	{	
		GlobalFree(hTempDIB);
		GlobalFree(hDIB);
		return;
	}
	lpTemp = (LPBYTE)GlobalLock(hTempDIB);
	lpTemp+= sizeof(BITMAPINFOHEADER);
	//下面的循環實現腐蝕功能
	for (int i=1; i<height-1; i++)
		for (int j=1; j<width-1; j++)
		{
			lOffset = PixelOffset(i,j,wBytesPerLine);
			//如果為白色點
			if (*(lpData+lOffset) == 255)
			{	
				//考察上面的點
				lOffsetJudge = PixelOffset(i-1, j, wBytesPerLine);
				//如果是黑色就把原來的點設置為黑色,并接著循環
				if (*(lpData + lOffsetJudge) ==0)
				{
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					continue;
				}
				//考察下面的點
				lOffsetJudge = PixelOffset(i+1, j, wBytesPerLine);
				if (*(lpData + lOffsetJudge) ==0)
				{
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					continue;
				}
				//左面的點
				lOffsetJudge = PixelOffset(i, j-1, wBytesPerLine);
				if (*(lpData + lOffsetJudge) ==0)
				{
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					continue;
				}
				//右面的點
				lOffsetJudge = PixelOffset(i, j+1, wBytesPerLine);
				if (*(lpData + lOffsetJudge) ==0)
				{
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					continue;
				}
				//如果上下左右四個點都是白色,則設置為白色
				lOffset = this->PixelOffset(i, j, wBytesPerLine);
				*(lpTemp + lOffset)   = 255;
				*(lpTemp + lOffset+1) = 255;
				*(lpTemp + lOffset+2) = 255;
				
			}
			//如果當前點為黑色,則在暫時的目標區域中設置為黑色
			else
			{
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;
			}
		}
		
		//把圖象周邊的點全部設置為黑色
		for(i=0; i<height; i++)
		{
			lOffset = PixelOffset(i, 0, wBytesPerLine);
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;

		}
		
		for(i=0; i<height; i++)
		{
			lOffset = PixelOffset(i, width-1, wBytesPerLine);
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;

		}

	for (i=0; i<width; i++)
		{
			lOffset = PixelOffset(0, i, wBytesPerLine);
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;

		}
	
	for (i=0; i<width; i++)
		{
			lOffset = PixelOffset(height-1, i, wBytesPerLine);
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;

		}
	//把暫時區域的數值拷貝到原來的句柄下面
	memcpy(lpData,lpTemp,wBytesPerLine*height);
	GlobalUnlock(hDIB);
	GlobalUnlock(hTempDIB);
	GlobalFree(hTempDIB);

}


void DIB::Erasion2(HANDLE hDIB)
{
	LPBITMAPINFOHEADER lpbi;
	LPBYTE lpData;
	WORD wBytesPerLine;
	long lOffset;
	long lOffsetJudge;
	int height;
	int width;

	lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
	height = lpbi->biHeight;
	width = lpbi->biWidth;
	wBytesPerLine = BytePerLine(hDIB);
	lpData = FindDIBBits(hDIB);
	
	HANDLE hTempDIB;
	LPBYTE lpTemp;
	//申請相同大小的內存
	hTempDIB =   GlobalAlloc(GMEM_MOVEABLE,(DWORD)(sizeof(BITMAPINFOHEADER) + wBytesPerLine*height));
	if(!hTempDIB)
	{	
		GlobalFree(hTempDIB);
		GlobalFree(hDIB);
		return;
	}
	lpTemp = (LPBYTE)GlobalLock(hTempDIB);
	lpTemp+= sizeof(BITMAPINFOHEADER);
	//下面的代碼實現腐蝕功能
	for (int i=1; i<height-1; i++)
		for (int j=1; j<width-1; j++)
		{	
			//如果當前點為白色
			lOffset = PixelOffset(i,j,wBytesPerLine);
			if (*(lpData+lOffset) == 255)
			{
				
				//判斷左邊的帶你,如果是黑色的就把暫時區域中的對應點設置為黑色
				lOffsetJudge = PixelOffset(i, j-1, wBytesPerLine);
				if (*(lpData + lOffsetJudge) ==0)
				{
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					continue;
				}
				//考察右邊的點
				lOffsetJudge = PixelOffset(i, j+1, wBytesPerLine);
				if (*(lpData + lOffsetJudge) ==0)
				{
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					*(lpTemp + lOffset++) = 0;
					continue;
				}

				//如果左右兩邊的點都是白色把點設置為白色
				lOffset = this->PixelOffset(i, j, wBytesPerLine);
				*(lpTemp + lOffset)   = 255;
				*(lpTemp + lOffset+1) = 255;
				*(lpTemp + lOffset+2) = 255;
				
			}
			//如果當前點為黑色,則把暫時區域中對應點設置為黑色
			else
			{
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;
			}
		}
		//把圖象四周的點設置為黑色
		for(i=0; i<height; i++)
		{
			lOffset = PixelOffset(i, 0, wBytesPerLine);
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;

		}
		
		for(i=0; i<height; i++)
		{
			lOffset = PixelOffset(i, width-1, wBytesPerLine);
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;

		}

	for (i=0; i<width; i++)
		{
			lOffset = PixelOffset(0, i, wBytesPerLine);
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;

		}
	
	for (i=0; i<width; i++)
		{
			lOffset = PixelOffset(height-1, i, wBytesPerLine);
				*(lpTemp + lOffset)   = 0;
				*(lpTemp + lOffset+1) = 0;
				*(lpTemp + lOffset+2) = 0;

		}
	//把暫時區域的點拷貝到原句柄下
	memcpy(lpData,lpTemp,wBytesPerLine*height);
	GlobalUnlock(hDIB);
	GlobalUnlock(hTempDIB);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区中文字幕| 日韩成人免费电影| 成人av电影免费在线播放| 日韩欧美在线综合网| 午夜精品一区在线观看| 欧美一区二区三区影视| 久久国产精品99精品国产 | 日韩丝袜情趣美女图片| 秋霞电影网一区二区| 精品黑人一区二区三区久久| 国产成人福利片| 亚洲三级小视频| 欧美三级视频在线| 激情综合网av| 国产精品久久久久7777按摩| 91亚洲精品久久久蜜桃网站 | 国产一区二区三区不卡在线观看| 国产午夜亚洲精品午夜鲁丝片 | 午夜精品久久久久久久99水蜜桃| 日韩一区二区三区视频| 国产高清不卡二三区| 中文字幕在线观看不卡| 精品污污网站免费看| 狠狠色狠狠色综合系列| 亚洲色图欧美在线| 欧美一卡二卡三卡| 不卡一区在线观看| 蜜桃视频一区二区三区在线观看| 国产片一区二区| 欧美日本一区二区在线观看| 国产精品1区二区.| 亚洲成人你懂的| 欧美高清在线一区| 欧美精品三级在线观看| 国产高清在线观看免费不卡| 亚洲成人7777| 国产精品色哟哟| 日韩一区二区视频在线观看| 99精品久久只有精品| 久久精品久久久精品美女| 亚洲欧洲日韩在线| 日韩视频在线一区二区| 色偷偷久久一区二区三区| 黄一区二区三区| 亚洲国产成人av网| 国产精品不卡在线| 日韩欧美一级精品久久| 91在线你懂得| 国产精品18久久久久久vr | 捆绑调教一区二区三区| 国产精品超碰97尤物18| 日韩精品一区国产麻豆| 在线观看国产91| 成人在线综合网站| 蜜臀久久久99精品久久久久久| 亚洲你懂的在线视频| 日本一区二区在线不卡| 91精品国产色综合久久ai换脸| 91在线观看污| 风间由美一区二区三区在线观看 | 国产精品一二三四| 日本在线不卡视频一二三区| 一区二区三区av电影| 国产精品午夜免费| 国产婷婷色一区二区三区| 日韩欧美一卡二卡| 91精品福利在线一区二区三区| proumb性欧美在线观看| 国产福利精品导航| 国产激情一区二区三区| 国产呦精品一区二区三区网站| 视频一区二区三区中文字幕| 亚洲超碰97人人做人人爱| 一区二区三区日韩欧美精品| 亚洲男人都懂的| 亚洲欧美aⅴ...| 一区二区三区高清在线| 最新国产精品久久精品| 国产精品国产三级国产普通话蜜臀 | 久久精品视频一区| 久久欧美中文字幕| 久久久久久电影| 精品国产乱码久久久久久1区2区| 日韩欧美色电影| 精品裸体舞一区二区三区| 日韩欧美电影一区| 亚洲精品在线观看网站| 26uuu国产日韩综合| 久久久久久久久久久久久久久99 | 国产一区二区三区不卡在线观看| 精品在线一区二区| 国产一区二区三区日韩| 高清国产一区二区| av亚洲精华国产精华精华| 成人一区在线看| 色综合久久久久久久久久久| 日本精品裸体写真集在线观看| 91福利视频在线| 欧美一卡二卡在线观看| 久久久www免费人成精品| 国产精品丝袜在线| 亚洲女爱视频在线| 视频一区中文字幕国产| 精品亚洲国产成人av制服丝袜| 国产经典欧美精品| 色香蕉成人二区免费| 欧美一级xxx| 国产精品久久久一本精品| 亚洲黄色录像片| 另类专区欧美蜜桃臀第一页| 国产大片一区二区| 91福利社在线观看| 日韩欧美国产三级电影视频| 久久久亚洲国产美女国产盗摄| 国产精品久久影院| 亚洲国产成人精品视频| 激情综合五月天| 91高清在线观看| 久久久亚洲国产美女国产盗摄| 日韩美女久久久| 久久99这里只有精品| 97se亚洲国产综合自在线不卡| 欧美日韩黄色一区二区| 国产亚洲一区二区三区四区 | 蜜桃视频一区二区三区在线观看| 成人在线综合网| 91精品国产高清一区二区三区蜜臀| 久久综合精品国产一区二区三区| 综合激情网...| 久久国产乱子精品免费女| 一本大道久久a久久精二百| 日韩亚洲欧美综合| 亚洲欧美日韩一区二区三区在线观看| 日韩精品一二三| 99精品欧美一区二区三区小说 | 亚洲天天做日日做天天谢日日欢| 男人的天堂亚洲一区| 99视频一区二区| 精品日本一线二线三线不卡| 尤物av一区二区| 国产精品一区二区三区四区| 欧美日韩亚洲高清一区二区| 国产精品色一区二区三区| 日韩国产欧美一区二区三区| 97久久精品人人澡人人爽| 欧美电影免费观看高清完整版| 亚洲自拍偷拍综合| 不卡av电影在线播放| 日韩午夜在线观看视频| 亚洲女人****多毛耸耸8| 国产999精品久久久久久绿帽| 欧美裸体bbwbbwbbw| 亚洲精品乱码久久久久久久久 | 一区二区欧美国产| 国产91精品一区二区麻豆网站| 91精品国产综合久久香蕉麻豆| 亚洲激情欧美激情| av亚洲精华国产精华| 亚洲国产高清在线观看视频| 激情综合色综合久久| 日韩一区二区三区观看| 五月天久久比比资源色| 91成人在线精品| 综合av第一页| 91麻豆蜜桃一区二区三区| 国产日韩精品久久久| 久久99精品国产麻豆婷婷| 日韩免费在线观看| 美女免费视频一区二区| 7799精品视频| 欧美aaa在线| 日韩精品一区国产麻豆| 欧美aⅴ一区二区三区视频| 日韩欧美三级在线| 精品影院一区二区久久久| 精品国产精品网麻豆系列 | 成人在线一区二区三区| 中文字幕久久午夜不卡| 成人一区二区三区视频在线观看| 国产日本欧美一区二区| 国产不卡视频一区| 国产精品午夜春色av| 色综合久久综合| 一区二区三区精品在线观看| 欧美性极品少妇| 日韩成人免费在线| 久久综合久久99| 成人激情小说乱人伦| 亚洲欧美日韩一区| 欧美日韩亚洲综合在线| 久久国产精品无码网站| 国产三级精品三级| av成人免费在线| 亚洲国产精品久久久久秋霞影院| 欧美一级理论片| 国产99久久久国产精品潘金网站| 亚洲欧美精品午睡沙发| 777色狠狠一区二区三区| 国产最新精品免费| 中文字幕亚洲电影|