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

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

?? bingxingbianjiedib.cpp

?? 圖像處理算法相關VC程序 VC++圖像處理程序設計配套光盤
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			}
			//判斷右面的點,如果為白,則壓入堆棧
			//注意防止越界
			if(iCurrentPixelx < wide - 1)
			{
				lpSrc = (LPBYTE)temp + wide * iCurrentPixely + iCurrentPixelx + 1;
				//取得當前指針處的像素值,注意要轉換為unsigned char型
				pixel =  *lpSrc;
				if (pixel == 255)
				{
					StackPoint++;
					Seeds[StackPoint].Height = iCurrentPixely;
					Seeds[StackPoint].Width = iCurrentPixelx + 1;
				}
			}
			//判斷下面的點,如果為白,則壓入堆棧
			//注意防止越界
			if(iCurrentPixely > 0)
			{
				lpSrc = (LPBYTE)temp + wide * (iCurrentPixely - 1) + iCurrentPixelx;
				//取得當前指針處的像素值,注意要轉換為unsigned char型
				pixel =  *lpSrc;
				if (pixel == 255)
				{
					StackPoint++;
					Seeds[StackPoint].Height = iCurrentPixely - 1;
					Seeds[StackPoint].Width = iCurrentPixelx;
				}		 
			}
		}
		//釋放堆棧
		delete Seeds;
	}
}

///***************************************************************/           
/*函數名稱:Yuzhifenge(int Yuzhi)                                      
/*函數類型:void
/*參數說明:Yuzhi  ---閾值選取                                     
/*功能:對圖像進行閾值分割。            
/***************************************************************/
void BingXingBianJieDib::Yuzhifenge(int Yuzhi)
{
	// 指向源圖像的指針
	LPBYTE  p_data;
	LPBYTE	lpSrc;
	// 指向緩存圖像的指針
	LPBYTE	lpDst;
	// 指向緩存DIB圖像的指針
	LPBYTE	temp;
	//循環變量
	long i;
	long j;
	//圖像的高和寬
	long wide;
	long height;
	p_data=GetData();
	if(m_pBitmapInfoHeader->biBitCount<9)	//灰度圖像
		wide=GetWidth();
	else	//24位彩色
		wide=GetDibWidthBytes();
	height=GetHeight();
	temp=new BYTE[wide*height];
	memset(temp,255,wide*height);
	for (j=0;j<height;j++)
	{
		for(i=0;i<wide;i++)
		{
			lpSrc=p_data+wide*j+i;
			lpDst=temp+wide*j+i;
			if(abs(*lpSrc-Yuzhi)<30)
				*lpDst=Yuzhi;			
		}
	}
    memcpy(p_data,temp,wide*height);
	delete temp;	
}

///***************************************************************/           
/*函數名稱:Qiyuzengzhang(CPoint point)                                      
/*函數類型:void
/*參數說明:point  ---獲得生長點                                     
/*功能:對圖像進行區域生長。            
/***************************************************************/
void BingXingBianJieDib::Qiyuzengzhang(CPoint point)
{
    // 循環變量
	int i;
	int j;
	// 指向DIB象素指針
	LPBYTE p_data;
	// 找到DIB圖像象素起始位置	
    p_data=GetData();
	// DIB的寬度
	LONG wide = GetWidth();	
	// DIB的高度
	LONG height =GetHeight();
	if(m_pBitmapInfoHeader->biBitCount<9)	//灰度圖像
	{
		// 計算種子點一的灰度值
		unsigned char  zhongzi=*(p_data+point.y*wide+point.x);	
		// 對各像素進行灰度轉換
		for (j = 0; j < height; j ++)
		{
			for (i = 0; i < wide; i ++)
			{
				//獲取各顏色分量
				unsigned char temp = *((unsigned char *)p_data + wide * j +i);
				if (abs(temp - zhongzi) < 10)    //當前點同種子一灰度值比較接近
				{								
					//將種子一的顏色賦給當前像素			 
					*((unsigned char *)p_data + wide * j + i ) = temp;
				}
				else 
					*((unsigned char *)p_data + wide * j + i ) =255;
			}
		}
	}
	else	//24位彩色
	{
		// 計算種子點一的灰度值
		int  zhongzi=*(p_data+(height-point.y)*wide*3+point.x*3);
		int   zhongzi2=*(p_data+(height-point.y)*wide*3+point.x*3+1);
		int   zhongzi3=*(p_data+(height-point.y)*wide*3+point.x*3+2);  	
		// 對各像素進行灰度轉換
		for (j = 0; j < height; j ++)
		{
			for (i = 0; i < wide; i ++)
			{
				//獲取各顏色分量
				int  temp = *((unsigned char *)p_data + 3*wide * j +i*3);
				int  temp2 = *((unsigned char *)p_data + 3*wide * j +i*3+1);
				int  temp3 = *((unsigned char *)p_data + 3*wide * j +i*3+2);
				if (abs(temp - zhongzi) < 10&&abs(temp2 - zhongzi2) < 10&&abs(temp3 - zhongzi3) < 10)    //當前點同種子一灰度值比較接近
				{								
					//將種子一的顏色賦給當前像素			 
					*(p_data + 3*wide * j + i*3 ) = temp;
					*(p_data +3*wide* j + i*3+1 ) = temp2;
					*(p_data +3*wide * j + i*3+2 ) = temp3;
				}
				else 
				{
					*(p_data + 3*wide * j + i*3 ) =255;
					*(p_data + 3*wide * j + i*3+1 ) =255;
					*(p_data + 3*wide * j + i*3+2 ) = 255;
				}
			}
		}
	} 
}
 
///***************************************************************/           
/*函數名稱:Zhifangtu(float *fPs_Y)                              */
/*函數類型:void                                                 */
/*變量說明:tongji  灰度分布密度統計                             */                           
/*功能:對圖像進行灰度直方圖統計。								 */
/*****************************************************************/
void BingXingBianJieDib::Zhifangtu(float *tongji)
{
	// 循環變量
	int i;
	int j;
	// 灰度計數
	int huidu[256];
	int wide,height;    //原圖長、寬
	// 變量初始化
	memset(huidu,0,sizeof(huidu));
	if(m_pBitmapInfoHeader->biBitCount<9)	//灰度圖像
	{
        wide=this->GetWidth ();
        height=this->GetHeight ();
		int width= (((wide*24) + 31) / 32 * 4) ;
		LPBYTE temp1=new BYTE[wide*height+1024];    //新圖像緩沖區
		//拷貝原圖像到緩存圖像
		memcpy( temp1,m_pData,wide*height );
		// 對各像素進行灰度統計
		for (i = 0; i < height; i ++)
		{
			for (j = 0; j <wide; j ++)
			{
				unsigned char  temp =  temp1[wide* i + j] ;			  			 
				// 灰度統計計數
				huidu[temp]++;		
			}
		}
		// 計算灰度分布密度
		for(i=0;i<256;i++)
			tongji[i] = huidu[i] / (height * wide *1.0f);
	}
	else	//24位彩色
	{
       	wide=this->GetDibWidthBytes();
        height=this->GetHeight ();
		LPBYTE  temp1=new BYTE[wide*height];    //新圖像緩沖區
		//拷貝原圖像到緩存圖像
		memcpy(temp1,m_pData,wide*height );
		// 對各像素進行灰度統計
		for (i = 0; i < height; i ++)
		{
			for (j = 0; j <wide; j ++)
			{
				unsigned char  temp = temp1[wide* i + j] ;
				// 灰度統計計數
				huidu[temp]++;		
			}
		} 
		// 計算灰度分布密度
		for(i=0;i<256;i++)
			tongji[i] = huidu[i] / (height * wide *1.0f);
	} 
}

///***************************************************************/           
/*函數名稱:BanYuZhi(int Yuzhi)                                      
/*函數類型:void
/*參數說明:Yuzhi  ---閾值選取                                     
/*功能:對圖像進行半閾值分割。            
/***************************************************************/
void BingXingBianJieDib::BanYuZhi(int Yuzhi)
{
    // 指向源圖像的指針
	LPBYTE  p_data;
	LPBYTE	lpSrc;
	// 指向緩存圖像的指針
	LPBYTE	lpDst;
	// 指向緩存DIB圖像的指針
	LPBYTE	temp;
	//循環變量
	long i;
	long j;
	//圖像的高和寬
	long wide;
	long height;
	p_data=GetData();
	if(m_pBitmapInfoHeader->biBitCount<9)	//灰度圖像
	{
		wide=GetWidth();
	}
	else	//24位彩色
		wide=GetDibWidthBytes();
	height=GetHeight();
	temp=new BYTE[wide*height];
	memset(temp,255,wide*height);
	for (j=0;j<height;j++)
	{
		for(i=0;i<wide;i++)
		{
			lpSrc=p_data+wide*j+i;
			
			lpDst=temp+wide*j+i;
			
			if((*lpSrc-Yuzhi)<30)
				*lpDst=*lpSrc;			
		}
	}
    memcpy(p_data,temp,wide*height);
	delete temp;
	
}

///***************************************************************/           
/*函數名稱:Lunkuotiqu(CPoint SeedPoint)                                      
/*函數類型:void
/*參數說明:SeedPoint  ---種子點選取                                     
/*功能:對24位彩色圖像進行輪廓提取。            
/***************************************************************/
void BingXingBianJieDib::Lunkuotiqu(CPoint SeedPoint)
{
    LPBYTE  p_data ;     //原圖數據區指針
    int R,G,B,R1,G1,B1;
	int wide,height;    //原圖長、寬
	// 指向源圖像的指針
	LPBYTE	lpSrc;	
	// 指向緩存圖像的指針
	LPBYTE	lpDst;	
	// 指向緩存DIB圖像的指針
	LPBYTE	temp;	
	//循環變量
	int i;
	int j;
	p_data=GetData();
	wide=GetWidth();
    height=GetHeight();
	temp = new BYTE[wide * height*3];
	// 初始化新分配的內存,設定初始值為255
	memset(temp,  255, wide * height*3);
	lpSrc=p_data+wide*3*(height-SeedPoint.y)+3*SeedPoint.x;
	R1=*lpSrc;
    lpSrc++;
	G1=*lpSrc;
	lpSrc++;
	B1=*lpSrc;
	for(j=0;j<height;j++)
	{
		for(i=0;i<wide;i++)
		{
			lpSrc = (LPBYTE)p_data + wide * j*3 + i*3;
			// 指向目標圖像倒數第j行,第i個象素的指針			
			lpDst = (LPBYTE)temp + wide * j*3 + i*3;
			int I;
			I=0;
			for(int k=i-1;k<i+2;k++)
			{
				for(int l=j-1;l<j+2;l++)
				{
					if(k>=0&&l>=0&&k<wide&&l<height)
					{
						R=*(p_data+l*wide*3+k*3);
						G=*(p_data+l*wide*3+k*3+1);
						B=*(p_data+l*wide*3+k*3+2);
						if(abs(R-R1)<10&&abs(G-G1)<10&&abs(B-B1)<10)
							I++;
					}
				}
			}
			if(I!=9)
			{	
				*lpDst=*lpSrc;
				*(lpDst+1)=*(lpSrc+1);
				*(lpDst+2)=*(lpSrc+2);
			} 
			else
			{
				*lpDst=255;
				*(lpDst+1)=255;
				*(lpDst+2)=255;
			}
		}
	}
	memcpy(p_data,temp, wide * height*3);
	delete temp;
}

/*************************************************************/
//此算法只適用于左邊有邊界的圖像//
/*************************************************************/
void BingXingBianJieDib::Lunkuogenzong(CPoint SeedPoint)
{
	// 指向源圖像的指針
	LPBYTE	lpSrc;
	LPBYTE   p_data ;
	int R1,G1,B1;
    int R,G,B;
	// 指向緩存圖像的指針
	LPBYTE	lpDst;
	// 指向緩存DIB圖像的指針
	LPBYTE	temp;
	int wide;
	int height; 
	//循環變量
	int i;
	int j;
	//像素值
    int pixel;
	//是否找到起始點及回到起始點
	bool bFindStartPoint;
	//是否掃描到一個邊界點
	bool bFindPoint;
	//起始邊界點與當前邊界點
	Point StartPoint,CurrentPoint;
	//八個方向和起始掃描方向
	int Direction[8][2]={{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}};
	int BeginDirect;
	p_data=GetData();
	wide=this->GetWidth();
	height=this->GetHeight();
	// 暫時分配內存,以保存新圖像
	temp = new BYTE[wide*height*3];
	// 初始化新分配的內存,設定初始值為255
	lpDst = temp;
	memset(temp, (BYTE)255, wide * height*3);
	//先找到最左方的邊界點
    lpSrc=p_data+wide*3*(height-SeedPoint.y)+3*SeedPoint.x;//確定鼠標點的色度值
	R1=*lpSrc;
    lpSrc++;
	G1=*lpSrc;
	lpSrc++;
	B1=*lpSrc;
	bFindStartPoint = false;
    int s= height-SeedPoint.y;
	for(i=SeedPoint.x;i>1;i--)  //從鼠標點開始向左尋找邊界起始點
	{
		lpSrc = (LPBYTE)p_data + wide * (height-SeedPoint.y)*3 + i*3;
		// 指向目標圖像倒數第j行,第i個象素的指針			
		lpDst = (LPBYTE)temp + wide * (height-SeedPoint.y)*3 + i*3;
		int count;
		count=0;
		for(int k=i-1;k<i+2;k++)
		{
			for(int l=s-1;l<s+2;l++)
			{
				if(k>=0&&l>=0&&k<wide&&l<height)
				{
					R=*(p_data+l*wide*3+k*3);
					G=*(p_data+l*wide*3+k*3+1);
					B=*(p_data+l*wide*3+k*3+2);
					if(abs(R-R1)<10&&abs(G-G1)<10&&abs(B-B1)<10)
						count++;
				}
			}
		}
		if(count!=9)
		{
			bFindStartPoint = true;
			StartPoint.Height = s;
			StartPoint.Width = i;
			// 指向目標圖像倒數第j行,第i個象素的指針			
			lpDst = (LPBYTE)(temp + wide * s*3 + i*3);	
			*lpDst = 0;
			*(lpDst+1)=0;
			*(lpDst+2)=0;
			break;
		} 
	}	        
	//由于起始點是在左下方,故起始掃描沿左上方向
	BeginDirect = 0;
	//跟蹤邊界
	bFindStartPoint = false;
	//從初始點開始掃描
	CurrentPoint.Height = StartPoint.Height;
	CurrentPoint.Width = StartPoint.Width;
	while(!bFindStartPoint)
	{
		bFindPoint = false;
		while(!bFindPoint)
		{
			//沿掃描方向查看一個像素
			lpSrc = (LPBYTE)(p_data + 3*wide * ( CurrentPoint.Height + Direction[BeginDirect][1])
				+ 3*(CurrentPoint.Width + Direction[BeginDirect][0]));
			R =*lpSrc;
			G=*(lpSrc+1);
			B=*(lpSrc+2);
			if(abs(R-R1)<10&&abs(G-G1)<10&&abs(B-B1)<10)
			{
				bFindPoint = true;
				CurrentPoint.Height = CurrentPoint.Height + Direction[BeginDirect][1];
				CurrentPoint.Width = CurrentPoint.Width + Direction[BeginDirect][0];
				if(CurrentPoint.Height == StartPoint.Height && CurrentPoint.Width == StartPoint.Width)
				{
					bFindStartPoint = true;
				}
				lpDst =  (LPBYTE)(temp + 3*wide * CurrentPoint.Height + 3*CurrentPoint.Width);
				*lpDst = *lpSrc;
                *(lpDst+1) = *(lpSrc+1);
				*(lpDst+2) = *(lpSrc+2);
				//掃描的方向逆時針旋轉兩格
				BeginDirect--;
				if(BeginDirect == -1)
					BeginDirect = 7;
				BeginDirect--;
				if(BeginDirect == -1)
					BeginDirect = 7;
			}
			else
			{
				//掃描方向順時針旋轉一格
				BeginDirect++;
				if(BeginDirect == 8)
					BeginDirect = 0;
			}
		}
	}
	// 復制圖像
	memcpy(p_data, temp, 3*wide * height);
	// 釋放內存
    delete temp; 
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看久久久4p| 亚洲天堂成人在线观看| 加勒比av一区二区| 日韩一区二区三区四区五区六区| 免费人成精品欧美精品 | 中文字幕一区二区三区色视频| 91在线看国产| 亚洲一区二区高清| 欧美一区二区在线视频| 九九**精品视频免费播放| 国产亚洲污的网站| 91网上在线视频| 日韩精彩视频在线观看| 久久综合九色欧美综合狠狠| 成人午夜在线免费| 亚洲一区视频在线| 精品国产一区久久| 波多野结衣在线aⅴ中文字幕不卡| 一区二区三区影院| 日韩精品一区二区三区老鸭窝| 国产精品乡下勾搭老头1| 亚洲人成网站色在线观看| 欧美一区欧美二区| av毛片久久久久**hd| 日本色综合中文字幕| 国产精品黄色在线观看| 欧美丰满高潮xxxx喷水动漫| 国产不卡视频在线观看| 亚洲成av人影院| 久久久亚洲国产美女国产盗摄 | 色94色欧美sute亚洲13| 老汉av免费一区二区三区| 欧美国产精品劲爆| 宅男在线国产精品| aaa国产一区| 九九精品一区二区| 午夜视频一区二区| 亚洲国产精华液网站w| 777午夜精品免费视频| 北岛玲一区二区三区四区| 免费成人美女在线观看.| 亚洲精品乱码久久久久久日本蜜臀| 日韩一区二区在线免费观看| 91久久一区二区| 国产91精品一区二区麻豆网站| 视频在线观看一区二区三区| 1000精品久久久久久久久| 久久蜜桃av一区二区天堂| 宅男噜噜噜66一区二区66| 日本精品免费观看高清观看| 国产成人在线看| 精品一区二区影视| 日韩不卡一二三区| 亚洲国产色一区| 亚洲美女少妇撒尿| 国产精品不卡一区二区三区| 久久久另类综合| 日韩免费在线观看| 91精品在线一区二区| 欧美日本一道本| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 日韩欧美黄色影院| 欧美精品 日韩| 欧美日韩免费在线视频| 欧美影片第一页| 91美女福利视频| 99精品欧美一区二区蜜桃免费 | www.一区二区| 国产·精品毛片| 国产+成+人+亚洲欧洲自线| 国产精品一区专区| 国产麻豆91精品| 国产一区二区三区观看| 韩国一区二区在线观看| 国产真实乱对白精彩久久| 久久99国内精品| 精品一区二区三区av| 精品伊人久久久久7777人| 老色鬼精品视频在线观看播放| 老司机一区二区| 国产二区国产一区在线观看| 成人美女在线观看| 色综合久久精品| 欧美性大战久久久| 欧美久久久久中文字幕| 日韩三级视频在线看| 久久色.com| 国产精品视频看| 亚洲免费av网站| 日韩高清不卡一区二区三区| 激情av综合网| 国产98色在线|日韩| 99精品视频一区| 欧美老肥妇做.爰bbww| 精品国产免费久久| 国产精品电影一区二区三区| 亚洲最大色网站| 久久狠狠亚洲综合| 成人av第一页| 欧美日本高清视频在线观看| 精品国产精品一区二区夜夜嗨| 国产亚洲欧美色| 亚洲精品自拍动漫在线| 日本视频免费一区| 成人激情免费视频| 欧美福利视频导航| 久久综合九色综合97_久久久| 亚洲视频每日更新| 美洲天堂一区二卡三卡四卡视频| 国产精品自拍av| 在线中文字幕一区二区| 精品国产一二三区| 一个色在线综合| 国产精品白丝av| 欧美性极品少妇| 国产欧美精品一区aⅴ影院| 亚洲综合区在线| 国产激情91久久精品导航| 欧美在线观看视频一区二区三区| 精品久久一区二区三区| 亚洲久本草在线中文字幕| 国产真实乱子伦精品视频| 91久久香蕉国产日韩欧美9色| 日韩视频永久免费| 伊人一区二区三区| 国产电影一区二区三区| 91精品国产综合久久精品| 亚洲欧美一区二区在线观看| 久久99精品国产麻豆不卡| 欧美日韩亚州综合| √…a在线天堂一区| 国产综合成人久久大片91| 欧美喷潮久久久xxxxx| 国产精品超碰97尤物18| 国产一区视频导航| 欧美性大战xxxxx久久久| 国产精品乱码久久久久久| 蜜桃一区二区三区在线观看| 欧美色老头old∨ideo| 亚洲天天做日日做天天谢日日欢| 国产原创一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 成人做爰69片免费看网站| 日韩欧美一区二区免费| 亚洲不卡av一区二区三区| gogogo免费视频观看亚洲一| xvideos.蜜桃一区二区| 日韩黄色免费电影| 欧美日本视频在线| 亚洲一区二区在线免费看| 99久久99久久久精品齐齐| 中文字幕第一区二区| 国产成人无遮挡在线视频| 日韩欧美一区二区视频| 日韩电影在线免费| 欧美挠脚心视频网站| 香蕉加勒比综合久久| 精品视频在线免费观看| 亚洲综合免费观看高清完整版在线 | 国产精品资源在线观看| 欧美成人官网二区| 日本不卡的三区四区五区| 欧美人伦禁忌dvd放荡欲情| 亚洲成av人综合在线观看| 欧美午夜精品免费| 亚洲综合色网站| 欧美在线观看视频在线| 午夜视频一区在线观看| 777精品伊人久久久久大香线蕉| 视频一区视频二区中文| 欧美老年两性高潮| 久久国产精品无码网站| 精品欧美一区二区在线观看| 国产一区二区精品久久99| 国产亚洲综合在线| 成人午夜av电影| 亚洲人午夜精品天堂一二香蕉| 91视频免费播放| 亚洲国产日韩综合久久精品| 51精品久久久久久久蜜臀| 精品一区二区三区免费播放| 日本一区二区视频在线观看| www.欧美色图| 亚洲男人的天堂在线aⅴ视频| 在线亚洲免费视频| 蜜臀va亚洲va欧美va天堂| 久久久精品国产99久久精品芒果| 国产91清纯白嫩初高中在线观看| 亚洲人成网站精品片在线观看| 欧美日韩和欧美的一区二区| 蜜桃av噜噜一区| 成人免费在线视频观看| 欧美色图在线观看| 激情六月婷婷久久| 亚洲欧美欧美一区二区三区| 欧美欧美欧美欧美首页| 国产成人精品免费网站| 一区二区三区小说| xfplay精品久久| 在线观看亚洲一区|