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

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

?? mydiblib.h

?? 本系統是一個基于神經網絡的文字識別系統
?? H
?? 第 1 頁 / 共 4 頁
字號:
                }
            }

            for(i=0; i<lx; i++)
            {
                for(j=0; j<ly; j++)
                {
                    kk = i*ly + j;
                    f[kk] = g[kk];
                }
            }
        }
    }while(shori);

    free(g);
}              


/*************************************************
*
* 函數名稱:
*       CharSegment()
*
*  參數:
*      HDIB  hDIB      -原圖像的句柄
*
*  返回值:
*     CRectLink        -存放被分割的各個字符位置信息的鏈表
*
* 功能:
*    將圖像中待識別的字符逐個分離出來并返回存放各個字符的位置信息的鏈表
*
*  說明:
*    此函數只能對2值化后的圖像進行處理
*
*********************************************************/


CRectLink CharSegment(HANDLE hDIB)
{
	
	//清空用來保存每個字符區域的鏈表
	CRectLink charRect1,charRect2;
	charRect1.clear();
	charRect2.clear();

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

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

	//圖像的長度和寬度
	int height,width;

	//獲取圖像的寬度
	width=(int)::DIBWidth(lpDIB);

	//獲取圖像的長度
	height=(int)::DIBHeight(lpDIB);

	//計算圖像每行的字節數
	LONG	lLineBytes = WIDTHBYTES(width * 8);

	//定義上下邊界兩個變量
	int top,bottom;

    //象素的灰度值
    int gray; 

	//設置循環變量
	int i,j;

	//用來統計圖像中字符個數的計數器
	digicount=0;


	//從上往下掃描,找到上邊界

	//行
	for (i=0;i<height;i++)
	{
         //列
  		for (j=0;j<width;j++)
		{
            // 指向圖像第i行,第j個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

			//獲得該點的灰度值
			gray = *(lpSrc);

			//看是否為黑點
			if (gray == 0)
			{   
               //若為黑點,把此點作為字符大致的最高點
				top = i;

				//對i強行賦值以中斷循環
				i=height;

				//跳出循環
				break;
			}

        //如果該點不是黑點,繼續循環
		}
	}


    //從下往上掃描,找下邊界

	//行
	for (i = height-1;i>=0;i--)
    {

		//列
		for (j=0;j<width;j++)
		{
			// 指向圖像第i行,第j個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

			//獲取該點的灰度值
			gray = *(lpSrc);

			//判斷是否為黑點
			if (gray == 0)
			{
				//若為黑點,把此點作為字符大致的最低點
				bottom = i;

				//對i強行賦值以中斷循環
				i=-1;

				//跳出循環
				break;
			}

          //如果該點不是黑點,繼續循環
		}
	
	}

	//lab 用作是否進入一個字符分割的標志
	bool lab = false;

	//表明掃描一列中是否發現黑色點
	bool black = false;

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

	//計數器置零
	digicount=0;
   
	//行
	for (i=0;i<width;i++)
	{
		//開始掃描一列
		black=false;

		for (j=0;j<height;j++)
			{	
				// 指向圖像第i行,第j個象素的指針
				lpSrc = (unsigned char*)lpDIBBits + lLineBytes * j + i;

				//獲取該點的灰度值
				gray = *(lpSrc);

                //判斷是否為黑點
				if (gray == 0)
				{
					//如果發現黑點,設置標志位
					black=true;

					//如果還沒有進入一個字符的分割
					if(lab==false)
					{	
						//設置左側邊界
						rect.left = i;

						//字符分割開始
						lab = true;
					}

					//如果字符分割已經開始了
					else

                      //跳出循環
						break;
				}		
			}

		//如果已經掃到了最右邊那列,說明整副圖像掃描完畢。退出
           if(i==(width-1))
			   
		 //退出整個循環	   
		   break;

		//如果到此black仍為false,說明掃描了一列,都沒有發現黑點。表明當前字符分割結束
		if(lab==true&&black==false)
		{   
           //將位置信息存入結構體中

           //設置右邊界
			rect.right =i;

			//設置上邊界
			rect.top =top;

			//設置下邊界
			rect.bottom =bottom;

			//將框外括一個象素,以免壓到字符
			rect.InflateRect (1,1);

            //將這個結構體插入存放位置信息的鏈表1的后面
			charRect1.push_back (rect);

			//設置標志位,開始下一次的字符分割
			lab=false;

			//字符個數統計計數器加1
			digicount++;
			
		}

		//進入下一列的掃描

	}

   //再將矩形輪廓矩形的top和bottom精確化

	//將鏈表1賦值給鏈表2
	charRect2=charRect1;

    //將鏈表2的內容清空
    charRect2.clear ();

	//建立一個新的存放位置信息的結構體
	CRect rectnew;

	//對于鏈表1從頭至尾逐個進行掃描
	while(!charRect1.empty())
	{    
		//從鏈表1頭上得到一個矩形
		rect= charRect1.front();

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

		//計算更加精確的矩形區域

		//獲得精確的左邊界
		rectnew.left =rect.left-1 ;

		//獲得精確的右邊界
		rectnew.right =rect.right+1 ;

		//通過獲得的精確左右邊界對上下邊境重新進行精確定位

		// 由下而上掃描計算上邊界
		
		//行
		for(i=rect.top ;i<rect.bottom ;i++)
		{   
          //列
			for(j=rect.left ;j<rect.right ;j++)
			{   
                 // 指向圖像第i行,第j個象素的指針
				lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

				//如果這個象素是黑點
				if (*lpSrc == 0)
				{	
					//設置上邊界
					rectnew.top = i-1;
					
					//對i進行強制定義以跳出循環
					i=rect.bottom  ;

					//跳出循環
					break;
				}	
			}
		}

		//由下而上掃描計算下邊界
   
        //行
		for(i=rect.bottom-1 ;i>=rect.top  ;i--)
		{
			//列
			for(j=rect.left ;j<rect.right ;j++)
			{
				// 指向圖像第i行,第j個象素的指針
				lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

				//該點如果為黑點
				if (*lpSrc == 0)
				{	
					//設置下邊界
					rectnew.bottom = i+1;

                    //對i進行強制定義以跳出循環
					i=-1;
                    //跳出循環
					break;
				}	
			}
		}

		//將得到的新的準確的位置信息從后面插到鏈表2的尾上
		charRect2.push_back (rectnew);
	}

	//將鏈表2 傳遞給鏈表1
	charRect1=charRect2;
	
	//解除鎖定
	::GlobalUnlock(hDIB);

	//將鏈表1返回
	return charRect1;
}

/****************************************************************
* 函數名稱:
*      Convert256toGray()
*
* 參數:
*     HDIB hDIB     -圖像的句柄
*
*  返回值:
*        無
*
*  功能:
*     將256色位圖轉化為灰度圖
*
***************************************************************/

void Convert256toGray(HDIB hDIB)
{
	LPSTR	lpDIB;
	
	// 由DIB句柄得到DIB指針并鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB);
	
	// 指向DIB象素數據區的指針
	LPSTR   lpDIBBits;	

	// 指向DIB象素的指針
	BYTE *	lpSrc;	

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

	// 圖像每行的字節數
	LONG	lLineBytes;	

	// 指向BITMAPINFO結構的指針(Win3.0)
	LPBITMAPINFO lpbmi;	

	// 指向BITMAPCOREINFO結構的指針
	LPBITMAPCOREINFO lpbmc;
	
	// 獲取指向BITMAPINFO結構的指針(Win3.0)
	lpbmi = (LPBITMAPINFO)lpDIB;	

	// 獲取指向BITMAPCOREINFO結構的指針
	lpbmc = (LPBITMAPCOREINFO)lpDIB;	

	// 灰度映射表
	BYTE bMap[256];
	
	// 計算灰度映射表(保存各個顏色的灰度值),并更新DIB調色板
	int	i,j;
	for (i = 0; i < 256; i ++)
	{
		// 計算該顏色對應的灰度值
		bMap[i] = (BYTE)(0.299 * lpbmi->bmiColors[i].rgbRed +

					     0.587 * lpbmi->bmiColors[i].rgbGreen +

				         0.114 * lpbmi->bmiColors[i].rgbBlue + 0.5);			
		// 更新DIB調色板紅色分量
		lpbmi->bmiColors[i].rgbRed = i;	
		
		// 更新DIB調色板綠色分量
		lpbmi->bmiColors[i].rgbGreen = i;	
		
		// 更新DIB調色板藍色分量
		lpbmi->bmiColors[i].rgbBlue = i;
			
		// 更新DIB調色板保留位
		lpbmi->bmiColors[i].rgbReserved = 0;

	}
	// 找到DIB圖像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);
		
	// 獲取圖像寬度
	lWidth = ::DIBWidth(lpDIB);	

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

	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);	

// 更換每個象素的顏色索引(即按照灰度映射表換成灰度值)

//逐行掃描
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);
}

/******************************************************************
*
* 函數名稱ConvertGrayToWhiteBlack()
*
* 參數 :HDIB hDIB     -原圖的句柄
*
* 返回值:無
*
* 功能: ConvertGrayToWhiteBlack函數采用硬閾值的方法,實現將圖像二值化的功能。
* 
* 說明:
要求待處理的圖片為256色
************************************************************************/

void ConvertGrayToWhiteBlack(HDIB hDIB)
{
	// 指向DIB的指針
	LPSTR	lpDIB;
	
	// 由DIB句柄得到DIB指針并鎖定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB);
	
	// 指向DIB象素數據區的指針
	LPSTR   lpDIBBits;
	
	// 指向DIB象素的指針
	BYTE *	lpSrc;	

	// 圖像寬度
	LONG	lWidth;	

	// 圖像高度
	LONG	lHeight;	
	// 圖像每行的字節數
	LONG	lLineBytes;	

	// 找到DIB圖像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);	
	
	// 獲取圖像寬度
	lWidth = ::DIBWidth(lpDIB);	

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

	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);	

	// 更換每個象素的顏色索引(即按照灰度映射表換成灰度值)
	int i,j;

    //逐行掃描
	for(i = 0; i < lHeight; i++)
 {

   //逐列掃描
	for(j = 0; j < lWidth; j++)
	{

	// 指向DIB第i行,第j個象素的指針
	lpSrc = (unsigned char*)lpDIBBits + lLineBytes * i + j;

	// 二值化處理

   //大于220,設置為255,即白點
	if(*lpSrc>220) *lpSrc=255;

  //否則設置為0,即黑點
	else *lpSrc=0;

	}

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

/*****************************************************************
*
*  函數名稱 
*       DeleteScaterJudge()
*
*  參數:
*     LPSTR   lpDIBBits      -指向象素起始位置的指針
*	  WORD    lLineBytes     -圖像每行的字節數
*     LPBYTE  lplab          -標志位數組
*     int     lWidth         -圖像的寬度
*	  int     lHeight        -圖像的高度
*     int     x              -當前點的橫坐標
*	  int     y              -當前點的縱坐標 
*     CPoint  lab[]          -存放議考察過的連續點坐標
*     int     lianXuShu      -離散點的判定長度
*
*  返回值:
*     Bool                   -是離散點返回false 不是離散點返回true
*	 
*  功能:
*     利用遞歸算法統計連續點的個數,通過閾值來判定是否為離散點
*
*  說明:
*     只能對2值圖像進行處理
******************************************************************/     


bool DeleteScaterJudge(LPSTR lpDIBBits, WORD lLineBytes, LPBYTE lplab, int lWidth, int lHeight, int x, int y, CPoint lab[], int lianXuShu)
{
	
	//如果連續長度滿足要求,說明不是離散點,返回
	if(m_lianXuShu>=lianXuShu)
		return TRUE;

	//長度加一
	m_lianXuShu++;

	//設定訪問標志
	lplab[lWidth * y +x] = true;
	
	//保存訪問點坐標
	lab[m_lianXuShu-1].x = x;
	lab[m_lianXuShu-1].y = y;

	//象素的灰度值
	int gray;
  
	//指向象素的指針
	LPSTR lpSrc;

	//長度判定
    //如果連續長度滿足要求,說明不是離散點,返回
	if(m_lianXuShu>=lianXuShu)
		return TRUE;
	
	//下面進入遞歸
	else
	{	
		//考察上下左右以及左上、右上、左下、右下八個方向
		//如果是黑色點,則調用函數自身進行遞歸

		//考察下面點
		
		lpSrc=(char*)lpDIBBits + lLineBytes * (y-1) + x;

		//傳遞灰度值
		gray=*lpSrc;

		//如果點在圖像內、顏色為黑色并且沒有被訪問過
		if(y-1 >=0 && gray == 0 && lplab[(y-1)*lWidth+x] == false)

		//進行遞歸處理		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品奇米国产一区二区三区| 日韩精品自拍偷拍| 欧美午夜精品电影| 日韩欧美激情四射| 国产精品第四页| 日韩美女视频一区| 轻轻草成人在线| 成人黄色片在线观看| 欧美视频一区二区在线观看| 久久综合网色—综合色88| 国产日韩av一区| 亚洲va天堂va国产va久| 国产v综合v亚洲欧| 欧美妇女性影城| 国产精品网站在线| **网站欧美大片在线观看| 婷婷中文字幕综合| 国产成人免费xxxxxxxx| 欧美日韩高清一区二区| 国产精品久久久久久福利一牛影视 | 欧美xxxxx牲另类人与| 毛片一区二区三区| 国产精品99久久久久久宅男| 777xxx欧美| 亚洲主播在线播放| 91美女在线看| 国产精品卡一卡二| 国产白丝精品91爽爽久久| 精品国产区一区| 国产原创一区二区| 6080日韩午夜伦伦午夜伦| 午夜精品久久一牛影视| 欧美日韩国产综合久久| 五月综合激情日本mⅴ| 精品视频在线视频| 亚洲国产精品一区二区www在线| 99国内精品久久| 玉足女爽爽91| 欧美午夜一区二区三区| 无码av中文一区二区三区桃花岛| 欧美三级三级三级| 日韩av电影免费观看高清完整版| 在线不卡一区二区| 美女国产一区二区三区| 精品久久久三级丝袜| 国产成人在线观看免费网站| 国产午夜精品一区二区三区嫩草 | 国产精品久久久久久久岛一牛影视| 国产精品一区二区黑丝| 中文字幕免费观看一区| eeuss国产一区二区三区| 一区二区三区不卡在线观看 | 日韩精品一区二区三区中文不卡| 精品一区二区三区视频在线观看 | jlzzjlzz亚洲女人18| 一区二区三区毛片| 欧美精品99久久久**| 激情综合色丁香一区二区| 久久精品在线免费观看| av在线不卡免费看| 亚洲国产美女搞黄色| 欧美刺激脚交jootjob| 懂色av一区二区在线播放| 一区二区三区日韩欧美精品| 欧美一区二区三区在线视频| 国产精品99久久久久久有的能看| √…a在线天堂一区| 7799精品视频| 成人精品视频一区二区三区| 亚洲国产成人91porn| 久久蜜桃av一区精品变态类天堂| 91美女视频网站| 韩国理伦片一区二区三区在线播放 | 欧美xxxx在线观看| 91丨九色丨国产丨porny| 日韩电影免费一区| 国产精品久久三| 日韩欧美一区在线| 91免费看片在线观看| 久草中文综合在线| 亚洲一区在线视频| 中文字幕免费不卡| 日韩欧美久久久| 欧美手机在线视频| 成人黄色免费短视频| 精品亚洲成a人| 亚洲电影第三页| 亚洲私人影院在线观看| 久久综合色综合88| 91精品在线麻豆| 一本一道久久a久久精品| 国产成人精品一区二| 婷婷国产v国产偷v亚洲高清| 综合网在线视频| 国产欧美日韩精品一区| 日韩一区二区免费在线电影| 欧美午夜精品免费| 日本精品一区二区三区四区的功能| 国产精品资源在线看| 麻豆国产91在线播放| 偷拍一区二区三区四区| 亚洲精品ww久久久久久p站| 国产精品家庭影院| 欧美激情一区二区三区不卡 | 欧美综合亚洲图片综合区| www.综合网.com| jlzzjlzz亚洲女人18| 不卡一区二区中文字幕| 丁香桃色午夜亚洲一区二区三区| 黄色日韩网站视频| 精品午夜久久福利影院| 久久精品国产精品亚洲红杏| 久久91精品国产91久久小草| 久久精品国内一区二区三区 | 肉丝袜脚交视频一区二区| 亚洲一区二区三区四区在线观看| 亚洲欧美另类久久久精品2019| 国产精品久久久久一区二区三区共| 欧美激情一区二区三区| 中文字幕免费不卡| 国产精品福利av| 亚洲视频电影在线| 亚洲一区免费视频| 亚洲午夜日本在线观看| 婷婷开心久久网| 日韩电影在线观看电影| 精品制服美女久久| 国产精品456| 成人av手机在线观看| 日本高清不卡aⅴ免费网站| 91成人在线免费观看| 欧美日韩亚洲丝袜制服| 日韩丝袜美女视频| 久久色成人在线| 国产精品久久久久久久久免费相片 | 不卡影院免费观看| 在线免费观看日本欧美| 欧美日韩aaaaaa| 欧美精品一区二| 中文字幕一区二区在线观看 | 中文字幕在线观看不卡| 亚洲午夜国产一区99re久久| 天堂在线亚洲视频| 国产乱子伦一区二区三区国色天香| 岛国精品一区二区| 精品视频色一区| 久久久久久**毛片大全| 一二三区精品福利视频| 久久精品国产第一区二区三区 | 国产一区二区调教| 日本电影欧美片| 日韩欧美二区三区| 亚洲丝袜另类动漫二区| 日韩不卡一区二区三区| 成人高清免费观看| 91精品国产丝袜白色高跟鞋| 欧美激情综合五月色丁香小说| 亚洲在线观看免费视频| 加勒比av一区二区| 在线免费精品视频| 久久久亚洲高清| 亚洲一区二区五区| 国产成人精品亚洲777人妖| 欧美日本一区二区三区| 国产精品久久久久桃色tv| 日韩中文字幕麻豆| 99久久精品国产一区| 精品国产乱码久久久久久蜜臀| 夜夜嗨av一区二区三区四季av | 7777精品伊人久久久大香线蕉经典版下载| 2023国产一二三区日本精品2022| 一区二区理论电影在线观看| 国产精品白丝jk黑袜喷水| 欧美一区午夜视频在线观看| 亚洲男人的天堂在线aⅴ视频| 国产乱子伦视频一区二区三区| 欧美日韩国产成人在线91| 中文字幕日韩欧美一区二区三区| 另类综合日韩欧美亚洲| 欧美日韩精品欧美日韩精品一 | 久久精品久久99精品久久| 欧美日韩在线精品一区二区三区激情 | 日韩欧美综合一区| 午夜久久久久久久久 | 一本一道波多野结衣一区二区| 久久精品日韩一区二区三区| 美女视频黄免费的久久| 欧美日韩一二三| 亚洲一级二级在线| 欧美三级中文字幕在线观看| 亚洲精品自拍动漫在线| 99久久er热在这里只有精品66| 中文字幕av免费专区久久| 国产麻豆视频一区| 国产午夜三级一区二区三| 国产精品伊人色| 国产日本欧洲亚洲| 国产成人精品免费网站| 中文字幕精品综合| 成人视屏免费看|