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

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

?? mydiblib.h

?? 《visual c++matlab圖像處理與識別實用案例精選》源碼
?? H
?? 第 1 頁 / 共 4 頁
字號:
	}

	// 將新的圖像的內容拷貝到舊的圖像中
	memcpy(lpDIBBits,lpNewDIBBits,lLineBytes*lHeight);

   // 解除鎖定
	::GlobalUnlock ((HGLOBAL)hDIB);
}



/******************************************************************
*
*  函數名稱:
*      StdDIBbyRect()
*
*  參數:
*     HDIB  hDIB          -圖像的句柄
*     int   tarWidth      -標準化的寬度
*     int   tarHeight     -標準化的高度
*
*  返回值:
*         無
*
*  功能:
*     將經過分割的字符,進行縮放處理使他們的寬和高一直,以方便特征的提取
*
*  說明:
*     函數中用到了,每個字符的位置信息,所以必須在執行完分割操作之后才能執行標準化操作
*
******************************************************************/
void StdDIBbyRect(HDIB hDIB, int tarWidth, int tarHeight)
{	

	//指向圖像的指針
	BYTE* lpDIB=(BYTE*)::GlobalLock ((HGLOBAL)hDIB);

	//指向象素起始位置的指針
	BYTE* lpDIBBits=(BYTE*)::FindDIBBits ((char*)lpDIB);
	
	//指向象素的指針
	BYTE* lpSrc;

	//獲取圖像的的寬度
	LONG lWidth=::DIBWidth ((char*)lpDIB);

	//獲取圖像的高度
	LONG lHeight=::DIBHeight ((char*)lpDIB);

	// 循環變量
	int	i;
	int	j;
	
	// 圖像每行的字節數
	LONG	lLineBytes = WIDTHBYTES(lWidth * 8);

	//寬度、高度方向上的縮放因子
	double wscale,hscale;

	//開辟一塊臨時緩存區,來存放變化后的圖像信息
	LPSTR lpNewDIBBits;
	LPSTR lpDst;
 
    //緩存區的大小和原圖像的數據區大小一樣
	HLOCAL nNewDIBBits=LocalAlloc(LHND,lLineBytes*lHeight);

	//指向緩存區開始位置的指針
	lpNewDIBBits=(char*)LocalLock(nNewDIBBits);

	//指向緩存內信息的指針
	lpDst=(char*)lpNewDIBBits;

	//將緩存區的內容賦初始值
	memset(lpDst,(BYTE)255,lLineBytes*lHeight);

	//進行映射操作的坐標變量
	int i_src,j_src;

	//存放字符位置信息的結構體
	CRect rect;
	CRect rectnew;

	//先清空一個新的矩形區域鏈表以便存儲標準化后的矩形區域鏈表
	m_charRectCopy.clear ();

	//從頭到尾逐個掃描各個結點
	while(!m_charRect.empty())
	{
		//從表頭上得到一個矩形
		rect= m_charRect.front();

		//從鏈表頭上面刪掉一個
		m_charRect.pop_front();

		//計算縮放因子

		//橫坐標方向的縮放因子
		wscale=(double)tarWidth/rect.Width ();

		//縱坐標方向的縮放因子
		hscale=(double)tarHeight/rect.Height ();

		//計算標準化矩形

		//上邊界
		rectnew.top =rect.top ;

		//下邊界
		rectnew.bottom =rect.top +tarHeight;

		//左邊界
		rectnew.left =rect.left ;

		//右邊界
		rectnew.right =rectnew.left +tarWidth;

		//將原矩形框內的象素映射到新的矩形框內
		for(i=rectnew.top ;i<rectnew.bottom ;i++)
		{
			for(j=rectnew.left ;j<rectnew.right ;j++)
			{   

				//計算映射坐標
				i_src=rectnew.top +int((i-rectnew.top )/hscale);
				j_src=rectnew.left +int((j-rectnew.left )/wscale);

				//將相對應的象素點進行映射操作
				lpSrc=(unsigned char *)lpDIBBits + lLineBytes *  i_src + j_src;
				lpDst = (char *)lpNewDIBBits + lLineBytes * i + j;
				*lpDst=*lpSrc;
			}
		}
		//將標準化后的矩形區域插入新的鏈表
		m_charRectCopy.push_back (rectnew);

	
	}

	//存儲標準化后新的rect區域
    m_charRect=m_charRectCopy;

	//將緩存區的內容拷貝到圖像的數據區內
	memcpy(lpDIBBits,lpNewDIBBits,lLineBytes*lHeight);

	//解除鎖定
	::GlobalUnlock ((HGLOBAL)hDIB);
}


void Thinning(HDIB hDIB)
{
	// 指向DIB的指針
	LPSTR lpDIB=(LPSTR) ::GlobalLock((HGLOBAL)hDIB);
	
	// 指向DIB象素指針
	LPSTR    lpDIBBits;	

	// 找到DIB圖像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);	
	
	// 指向源圖像的指針
	LPSTR	lpSrc;

	//圖像的高度和寬度
	LONG lWidth;
	LONG lHeight;

	//獲取圖像的寬度
	lWidth=::DIBWidth ((char*)lpDIB);

	//獲取圖像的高度
	lHeight=::DIBHeight ((char*)lpDIB);

    //計算每行的字節數
    LONG  lLineBytes = (lWidth+3)*4/4;

	//循環變量
    int i,j;

    //建立存儲區存放2值矩陣
	BYTE *image = (BYTE*)malloc(lWidth*lHeight*sizeof(BYTE));

	//給2值矩陣賦值

	for(i=0;i<lHeight;i++)
	{
	    for(j=0;j<lWidth;j++)
		{
	      lpSrc=lpDIBBits+i*lLineBytes+j;
	    
	      if(*lpSrc==0)
	      image[i*lWidth+j]=1;

		  else
         image[i*lWidth+j]=0;
		}
	}

   //調用函數進行細化,兩種函數可以選擇

   ThinnerRosenfeld(image,lHeight,lWidth);

   //ThinnerHilditch(image,lHeight,lWidth);



   //將結果賦值到原圖像中

   for(i=0;i<lHeight;i++)
   {
     for(j=0;j<lWidth;j++)
	 {
	   lpSrc=lpDIBBits+i*lLineBytes+j;

       if(image[i*lWidth+j]==1)
	   *lpSrc=(BYTE)0;

	   else
       *lpSrc=(BYTE)255;
	 }
   
   }


 //清空內存
   free(image);
   ::GlobalUnlock ((HGLOBAL)hDIB);

	return;
}

/*****************************************************
* 
*   函數名稱:
*      Template:
*
*    參數:
*	   HDIB    hDIB         -圖像的句柄
*      double  *tem         -指向模板的指針
*      int  tem_w           -模板的寬度
*      int  tem_h           -模板的高度
*      double xishu         -模板的系數
*         
*    功能:
*	   對圖像進行模板操作
*
*    說明:
*	   為處理方便起見,模板的寬度和高度都應為奇數
*******************************************************/
 HDIB Template(HDIB hDIB,double * tem ,int tem_w,int tem_h,double xishu)
{

    //統計中間值
    double sum;

    //指向圖像起始位置的指針
    BYTE *lpDIB=(BYTE*)::GlobalLock((HGLOBAL) hDIB);

	//指向象素起始位置的指針
	BYTE *pScrBuff =(BYTE*)::FindDIBBits((char*)lpDIB);
   
	//獲取圖像的顏色信息
    int numColors=(int) ::DIBNumColors((char *)lpDIB);

    //如果圖像不是256色返回
     if (numColors!=256) 
	 {   
        //解除鎖定
	  	::GlobalUnlock((HGLOBAL) hDIB);

		//返回
		return(hDIB);
	 }
    
    //將指向圖像象素起始位置的指針,賦值給指針變量
    BYTE* oldbuf = pScrBuff;

    //循環變量
    int i,j,m,n;

	int w, h, dw;

	//獲取圖像的寬度
	w = (int) ::DIBWidth((char *)lpDIB);
	
	//獲取圖像的高度
	h = (int) ::DIBHeight((char *)lpDIB);
	
	//計算圖像每行的字節數
	dw = (w+3)/4*4;      
	
	//建立一個和原圖像大小相同的25色灰度位圖
    HDIB newhDIB=NewDIB(w,h,8);  
    
	//指向新的位圖的指針
	BYTE *newlpDIB=(BYTE*)::GlobalLock((HGLOBAL) newhDIB);

	//指向新的位圖的象素起始位置的指針 
    BYTE *destBuf = (BYTE*)FindDIBBits((char *)newlpDIB);
    
   //將指向新圖像象素起始位置的指針,賦值給指針變量
    BYTE *newbuf=destBuf; 
	
	//對圖像進行掃描
   
	//行 
    for(i=0;i<h;i++)
    {  
		//列
	   for(j=0;j<w;j++)
	   {   

		   //為統計變量賦初始值
	       sum=0;

         //對于圖像的4個邊框的象素保持原灰度不變
	     if( j<((tem_w-1)/2) || j>(w-(tem_w+1)/2) || i<((tem_h-1)/2) || i>(h-(tem_h+1)/2) )
	      *(newbuf+i*dw+j)=*(oldbuf+i*dw+j);
		 
         //對于其他的象素進行模板操作
		 else 
         { 

          //將點(i,j)點作為模板的中心
          for(m=i-((tem_h-1)/2);m<=i+((tem_h-1)/2);m++)
          {
		     for(n=j-((tem_w-1)/2);n<=j+((tem_w-1)/2);n++)
		    
             //將以點(i,j)為中心,與模板大小相同的范圍內的象素與模板對用位置的系數
			 //進行相乘并線形疊加
		     sum+=*(oldbuf+m*dw+n)* tem[(m-i+((tem_h-1)/2))*tem_w+n-j+((tem_w-1)/2)];
		  
		  }
          
		  //將結果乘上總的模板系數
          sum=(int)sum*xishu;

		  //計算絕對值
		  sum = fabs(sum);

		  //如果小于0,強制賦值為0
          if(sum<0)     
          sum=0;

		  //如果大于255,強制賦值為255
          if(sum>255)
		  sum=255;

		  //將計算的結果放到新的位圖的相應位置
	      *(newbuf+i*dw+j)=sum;
		 }
	   }
	} 
   
	//解除鎖定
	::GlobalUnlock((HGLOBAL)hDIB);
    
	//返回新的位圖的句柄
    return(newhDIB);
}
/*****************************************************
* 
*   函數名稱:
*      Template:
*
*    參數:
*	   HDIB    hDIB         -圖像的句柄
*      int  tem_w           -模板的寬度
*      int  tem_h           -模板的高度
*      
*    功能:
*	   對圖像進行中值
*
*    說明:
*	   為處理方便起見,模板的寬度和高度都應為奇數
*******************************************************/

HDIB MidFilter(HDIB hDIB,int tem_w,int tem_h)
{

    //統計中間值
    double mid;

	BYTE *temp=(BYTE*)malloc(tem_w*tem_h*sizeof(BYTE));

    //指向圖像起始位置的指針
    BYTE *lpDIB=(BYTE*)::GlobalLock((HGLOBAL) hDIB);

	//指向象素起始位置的指針
	BYTE *pScrBuff =(BYTE*)::FindDIBBits((char*)lpDIB);
   
	//獲取圖像的顏色信息
    int numColors=(int) ::DIBNumColors((char *)lpDIB);

    //如果圖像不是256色返回
     if (numColors!=256) 
	 {   
        //解除鎖定
	  	::GlobalUnlock((HGLOBAL) hDIB);

		//返回
		return(hDIB);
	 }
    
    //將指向圖像象素起始位置的指針,賦值給指針變量
    BYTE* oldbuf = pScrBuff;

    //循環變量
    int i,j,m,n;

	int w, h, dw;

	//獲取圖像的寬度
	w = (int) ::DIBWidth((char *)lpDIB);
	
	//獲取圖像的高度
	h = (int) ::DIBHeight((char *)lpDIB);
	
	//計算圖像每行的字節數
	dw = (w+3)/4*4;      
	
	//建立一個和原圖像大小相同的25色灰度位圖
    HDIB newhDIB=NewDIB(w,h,8);  
    
	//指向新的位圖的指針
	BYTE *newlpDIB=(BYTE*)::GlobalLock((HGLOBAL) newhDIB);

	//指向新的位圖的象素起始位置的指針 
    BYTE *destBuf = (BYTE*)FindDIBBits((char *)newlpDIB);
    
   //將指向新圖像象素起始位置的指針,賦值給指針變量
    BYTE *newbuf=destBuf; 
	
	//對圖像進行掃描
   
	//行 
    for(i=0;i<h;i++)
    {  
		//列
	   for(j=0;j<w;j++)
	   {   

		   //為統計變量賦初始值
	       

         //對于圖像的4個邊框的象素保持原灰度不變
	     if( j<((tem_w-1)/2) || j>(w-(tem_w+1)/2) || i<((tem_h-1)/2) || i>(h-(tem_h+1)/2) )
	      *(newbuf+i*dw+j)=*(oldbuf+i*dw+j);
		 
         //對于其他的象素進行模板操作
		 else 
         { 

          //將點(i,j)點作為模板的中心
          for(m=i-((tem_h-1)/2);m<=i+((tem_h-1)/2);m++)
          {
		     for(n=j-((tem_w-1)/2);n<=j+((tem_w-1)/2);n++)
		    
             //將以點(i,j)為中心,與模板大小相同的范圍內的象素傳遞到模板矩陣中
		     temp[(m-i+((tem_h-1)/2))*tem_w+n-j+((tem_w-1)/2)]=*(oldbuf+m*dw+n);
		  
		  }
          
		 //利用氣泡法計算中值
           for(m=0;m<tem_w*tem_h-1;m++)
           {
		   
		      for(n=0;n<tem_w*tem_h-m-1;n++)
			  {
			    if(temp[n]>temp[n+1]) 
			    mid=temp[n];
                temp[n]=temp[n+1];
			    temp[n+1]=mid;
			  }
		   
		   } 

           //將計算的結果放到新的位圖的相應位置
	      *(newbuf+i*dw+j)=temp[(tem_w*tem_h-1)/2];
		 }
	   }
	} 
   
	//解除鎖定
	::GlobalUnlock((HGLOBAL)hDIB);
    
	//返回新的位圖的句柄
    return(newhDIB);
}



/*************************************************************************
 *
 * 函數名稱:
 *   Equalize()
 *
 * 參數:
 *   HDIB hDIB
 *
 *
 * 說明:
 *   該函數用來對圖像進行直方圖均衡。
 *
 ************************************************************************/
void Equalize(HDIB hDIB)
{
	BYTE* lpDIB=(BYTE*)::GlobalLock ((HGLOBAL)hDIB);
	BYTE* lpDIBBits=(BYTE*)::FindDIBBits((char*)lpDIB);
	LONG lHeight=::DIBHeight ((char*)lpDIB);
	LONG lWidth=::DIBWidth ((char*)lpDIB);
	// 指向源圖像的指針
	unsigned char*	lpSrc;
	
	// 臨時變量
	LONG	lTemp;
	
	// 循環變量
	LONG	i;
	LONG	j;
	
	// 灰度映射表
	BYTE	bMap[256];
	
	// 灰度映射表
	LONG	lCount[256];
	
	// 圖像每行的字節數
	LONG	lLineBytes;
	
	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);
	
	// 重置計數為0
	for (i = 0; i < 256; i ++)
	{
		// 清零
		lCount[i] = 0;
	}
	
	// 計算各個灰度值的計數
	for (i = 0; i < lHeight; i ++)
	{
		for (j = 0; j < lWidth; j ++)
		{
			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;
			
			// 計數加1
			lCount[*(lpSrc)]++;
		}
	}
	
	// 計算灰度映射表
	for (i = 0; i < 256; i++)
	{
		// 初始為0
		lTemp = 0;
		
		for (j = 0; j <= i ; j++)
		{
			lTemp += lCount[j];
		}
		
		// 計算對應的新灰度值
		bMap[i] = (BYTE) (lTemp * 255 / lHeight / lWidth);
	}
	
	// 每行
	for(i = 0; i < lHeight; i++)
	{
		// 每列
		for(j = 0; j < lWidth; j++)
		{
			// 指向DIB第i行,第j個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
			
			// 計算新的灰度值
			*lpSrc = bMap[*lpSrc];
		}
	}
	
	::GlobalUnlock ((HGLOBAL)hDIB);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲与欧洲av电影| 欧美精品在线观看一区二区| 久久亚区不卡日本| 免费国产亚洲视频| 欧美一卡2卡3卡4卡| 轻轻草成人在线| 欧美高清hd18日本| 精品无人码麻豆乱码1区2区| 欧美xingq一区二区| 国产曰批免费观看久久久| 欧美激情一区在线| 欧美日韩一区二区在线观看视频| 六月丁香婷婷色狠狠久久| 国产精品中文字幕一区二区三区| 精品一区二区三区日韩| 91在线播放网址| 国产亚洲欧美日韩在线一区| 亚洲区小说区图片区qvod| 一区二区三区免费观看| 欧美性生交片4| 国产精品一区二区免费不卡| 国产精品盗摄一区二区三区| 欧美性猛片aaaaaaa做受| 日韩精品电影在线| 国产精品美女久久久久久2018| 色综合天天综合色综合av | 国产成人精品免费一区二区| 日本一区二区视频在线观看| 色视频一区二区| 黑人精品欧美一区二区蜜桃| 亚洲美女视频在线| 2023国产精品自拍| 777a∨成人精品桃花网| 成人av免费网站| 精东粉嫩av免费一区二区三区| 亚洲少妇30p| 国产免费久久精品| 7777精品伊人久久久大香线蕉完整版 | 亚洲精品视频自拍| 国产拍欧美日韩视频二区| 91精品国产高清一区二区三区蜜臀 | 天天色 色综合| 最新国产成人在线观看| 国产精品欧美一区喷水| 国产偷国产偷精品高清尤物| 精品欧美一区二区在线观看| 欧美日韩在线精品一区二区三区激情| 国产一区二区三区免费观看| 久久成人综合网| 国产自产v一区二区三区c| 日本强好片久久久久久aaa| 五月开心婷婷久久| 日本午夜一本久久久综合| 日韩高清在线观看| 免费成人美女在线观看.| 日韩激情一二三区| 九色综合国产一区二区三区| 国精产品一区一区三区mba桃花| 精品一区二区三区免费观看| 卡一卡二国产精品 | |精品福利一区二区三区| 国产精品素人视频| 亚洲欧美日韩中文字幕一区二区三区| 中文字幕在线不卡视频| 亚洲一区二区av电影| 麻豆精品视频在线观看视频| 精品在线观看视频| thepron国产精品| 日本高清成人免费播放| 欧美日韩视频在线观看一区二区三区| 91精品国产一区二区三区蜜臀| 欧美成人a视频| 亚洲精品午夜久久久| 日韩成人一区二区三区在线观看| 国产电影一区在线| 色狠狠综合天天综合综合| 日韩美女天天操| 洋洋成人永久网站入口| 国产精品中文字幕日韩精品| 欧美日韩国产一二三| 国产精品美日韩| 韩国毛片一区二区三区| 91福利区一区二区三区| 欧美国产精品v| 久草中文综合在线| 欧美日韩久久一区| 亚洲女女做受ⅹxx高潮| 国产成人午夜精品影院观看视频| 欧美日韩一级二级| 亚洲五月六月丁香激情| 成人av网站免费观看| 日韩精品在线网站| 久久99在线观看| 正在播放亚洲一区| 免费观看日韩av| 日韩一区二区中文字幕| 免费在线观看成人| 日韩精品一区二区三区在线播放 | 久久综合色鬼综合色| 国产九九视频一区二区三区| 欧美一区二区黄| 久久超碰97人人做人人爱| 日韩欧美高清dvd碟片| 久久成人免费网站| 久久日一线二线三线suv| 国产剧情一区二区| 中文在线一区二区| 精品国产不卡一区二区三区| 亚欧色一区w666天堂| 91精品一区二区三区久久久久久| 日本美女视频一区二区| 久久久99免费| 色婷婷精品大在线视频| 青椒成人免费视频| 国产精品久久看| 在线影院国内精品| 国产一区二区三区久久久| 亚洲天堂成人在线观看| 欧美日韩国产一级二级| 国产精品一线二线三线精华| 一区二区三区产品免费精品久久75| 欧洲亚洲精品在线| 国产大陆亚洲精品国产| 亚洲va韩国va欧美va精品| 久久久国产综合精品女国产盗摄| 91蝌蚪国产九色| 国产在线精品国自产拍免费| 一区二区三区资源| 久久精品欧美日韩精品| 91精品国产综合久久久久| 91理论电影在线观看| 国产在线播放一区三区四| 午夜欧美大尺度福利影院在线看| 国产三级一区二区三区| 欧美情侣在线播放| 91高清在线观看| www.99精品| 99精品视频在线观看| 成人国产在线观看| 国产精品一级二级三级| 国产伦精品一区二区三区视频青涩| 一区二区三区精品视频在线| 国产精品国产三级国产aⅴ中文 | 91在线视频官网| 成人丝袜视频网| 成人精品视频一区二区三区尤物| 韩国视频一区二区| 国产99久久久精品| 国产精品一区二区在线看| 欧美午夜精品电影| 欧美色图一区二区三区| 欧美熟乱第一页| 欧美二区三区91| 精品福利一二区| 久久综合色一综合色88| 国产精品美女久久久久aⅴ| 日本一区二区电影| 亚洲视频一二三| 视频在线观看一区二区三区| 秋霞影院一区二区| 成人在线综合网站| 在线免费一区三区| 久久亚洲捆绑美女| 日韩毛片一二三区| 日日夜夜一区二区| 国产成人精品三级| 欧美日韩一区二区在线观看| 91精品国产综合久久久蜜臀图片| 久久蜜桃av一区二区天堂| 中文字幕综合网| 精品亚洲国产成人av制服丝袜| 99久久伊人精品| 777a∨成人精品桃花网| 国产精品久久午夜夜伦鲁鲁| 日韩精品一卡二卡三卡四卡无卡| 国产成人精品亚洲日本在线桃色| 欧洲av在线精品| 国产精品毛片大码女人| 亚洲777理论| 久久久综合九色合综国产精品| 一片黄亚洲嫩模| jizz一区二区| 国产亚洲精久久久久久| 狠狠色综合日日| 欧美精品777| 亚洲成人一区二区| 在线国产亚洲欧美| 亚洲欧洲性图库| gogo大胆日本视频一区| 国产色一区二区| 国产精品一区二区久久不卡 | 亚洲一区免费观看| 亚洲成人中文在线| 久久99国产精品尤物| 欧美亚洲愉拍一区二区| 91精品在线一区二区| 欧美精品一区男女天堂| 亚洲成人免费av| 欧美曰成人黄网| 欧美色精品天天在线观看视频|