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

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

?? mydiblib.h

?? 基于bp神經網絡的文字識別系統本
?? H
?? 第 1 頁 / 共 4 頁
字號:
#include "dibapi.h"
#include <iostream>
#include <deque>
#include <math.h>
using namespace std;

typedef deque<CRect> CRectLink;
typedef deque<HDIB>  HDIBLink;

//聲明一些必要的全局變量
int w_sample=8;
int h_sample=16;
bool fileloaded;
bool gyhinfoinput;
bool gyhfinished;
int digicount;
int m_lianXuShu;
CRectLink m_charRectCopy;
CRectLink m_charRect;
HDIBLink  m_dibRect;
HDIBLink  m_dibRectCopy;
HDIB m_hDIB;
CString strPathName;
CString strPathNameSave;

/********************************function declaration*************************************/

//清楚屏幕
void ClearAll(CDC* pDC);
//在屏幕上顯示位圖
void DisplayDIB(CDC* pDC,HDIB hDIB);
//對分割后的位圖進行尺寸標準歸一化
void StdDIBbyRect(HDIB hDIB, int tarWidth, int tarHeight);
//整體斜率調整
void SlopeAdjust(HDIB hDIB);
//去除離散噪聲點
void RemoveScatterNoise(HDIB hDIB);
//梯度銳化
void GradientSharp(HDIB hDIB);
//畫框
void DrawFrame(CDC* pDC,HDIB hDIB, CRectLink charRect,unsigned int linewidth,COLORREF color);
//將灰度圖二值化
void ConvertGrayToWhiteBlack(HDIB hDIB);
//將256色位圖轉為灰度圖
void Convert256toGray(HDIB hDIB);
//細化
void Thinning(HDIB hDIB);
//對位圖進行分割.返回一個存儲著每塊分割區域的鏈表
CRectLink CharSegment(HANDLE hDIB);
//緊縮、重排調整
HDIB AutoAlign(HDIB hDIB);
//判斷是否是離散噪聲點
bool DeleteScaterJudge(LPSTR lpDIBBits,WORD lLineBytes, LPBYTE lplab, int lWidth, int lHeight, int x, int y, CPoint lab[], int lianXuShu);
//對圖像進行模板操作
HDIB Template(HDIB hDIB,double * tem ,int tem_w,int tem_h,double xishu);
//對圖像進行中值濾波
HDIB MidFilter(HDIB hDIB,int tem_w,int tem_h);
//對圖像進行直方圖均衡
void Equalize(HDIB hDIB);
/***********************************implementation*************************************/

/*********************************** ************************************
函數名稱:DisplayDIB
參數:
	CDC* pDC			-指向當前設備上下文(Divice Context)的指針
	HDIB hDIB			-要顯示的位圖的句柄
**********************************************************************/

void DisplayDIB(CDC* pDC,HDIB hDIB)
{
	BYTE* lpDIB=(BYTE*)::GlobalLock((HGLOBAL)hDIB);
	// 獲取DIB寬度和高度
	int cxDIB =  ::DIBWidth((char*) lpDIB);
	int cyDIB =  ::DIBHeight((char*)lpDIB);
	CRect rcDIB,rcDest;
	rcDIB.top = rcDIB.left = 0;
	rcDIB.right = cxDIB;
	rcDIB.bottom = cyDIB;
	//設置目標客戶區輸出大小尺寸
	rcDest = rcDIB;
	//CDC* pDC=GetDC();
	ClearAll(pDC);
	//在客戶區顯示圖像
	//for(int ii=0;ii<10;ii++)
		::PaintDIB(pDC->m_hDC,rcDest,hDIB,rcDIB,NULL);
	::GlobalUnlock((HGLOBAL)hDIB);
}

void ClearAll(CDC *pDC)
{
	CRect rect;
	//GetClientRect(&rect);
	rect.left =0;rect.top =0;rect.right =2000;rect.bottom =1000;
	CPen pen;
	pen.CreatePen (PS_SOLID,1,RGB(255,255,255));
	pDC->SelectObject (&pen);
	pDC->Rectangle (&rect);
	::DeleteObject (pen);
}
/*******************************************
*
*  函數名稱:
*  AutoAlign()
*
*  參數:
*    HDIB   hDIB        -原圖像的句柄
*
*  返回值   
*    HDIB               -緊縮排列后的新圖像的句柄
*
*  功能:
*     將經過了標準化處理的字符進行規整的排列,以方便下一步的處理
*
*  說明:
*     緊縮排列的操作必須在標準化操作之后進行
*
********************************************************/


HDIB AutoAlign(HDIB hDIB)
{   
	
	//指向圖像的指針
 	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 w=m_charRect.front ().Width() ;

	//獲取標準化的高度
	int h=m_charRect.front ().Height() ;

	//建立一個新的圖像正好能夠將標準化的字符并排放置
	HDIB hNewDIB=::NewDIB (digicount*w,h,8);

	//指向新的圖像的指針
	BYTE* lpNewDIB=(BYTE*) ::GlobalLock((HGLOBAL)hNewDIB);
	
	//指向象素起始位置的指針
	BYTE* lpNewDIBBits=(BYTE*)::FindDIBBits((char*)lpNewDIB);

	//指向象素的指針
	BYTE* lpDst=lpNewDIBBits;

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

	//計算新圖像每行的字節數
	LONG lLineBytesnew =(digicount*w+3)/4*4;

	//將新的圖像初始化為白色
	memset(lpDst,(BYTE)255,lLineBytesnew * h);

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

	//循環變量
	int i,j;

	//統計字符個數的變量
	int counts=0;

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

	//清空一個新的鏈表來存放新的字符位置信息
	m_charRectCopy.clear ();

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

		//將這個矩形框從鏈表上刪除
		m_charRect.pop_front ();

		//計算新的矩形框的位置信息

		//左邊界
		rectnew.left =counts*w;

		//右邊界
		rectnew.right =(counts+1)*w;

		//上邊界
		rectnew.top =0;

		//下邊界
		rectnew.bottom =h;

		//將獲得的新的矩形框插入到新的鏈表中
		m_charRectCopy.push_back (rectnew);

		//將原矩形框內的象素映射到新的矩形框中
		for(i=0;i<h;i++)
		{  
			for(j=counts*w;j<(counts+1)*w;j++)
			{   

				//計算映射坐標
	          	i_src=rect.top +i;
				j_src=rect.left +j-counts*w;

				//進行象素的映射
				lpSrc=(BYTE *)lpDIBBits + lLineBytes *  i_src + j_src;
				lpDst=(BYTE *)lpNewDIBBits + lLineBytesnew * i + j;
				*lpDst=*lpSrc;
			}
		}

		//字符個數加1
		counts++;
		
	}

	//將獲得的新的鏈表復制到原鏈表中,以方便下一次的調用
	m_charRect=m_charRectCopy;

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


	::GlobalUnlock (hNewDIB);
	return hNewDIB;
}


/**************************************************
* 函數名稱:
*     ThinnerHilditch
*
* 參數:
*   void*     image             -二值化圖像矩陣前景色為1背景色為0
*   unsigned  longlx             -圖像的寬度
*   unsigned  longly             -圖像的高度
*
* 返回值
*       無
*
*函數功能:
*       對輸入的圖像進行細化,輸出細化后的圖像
***********************************************************/

void ThinnerHilditch(void *image, unsigned long lx, unsigned long ly)
{
    char *f, *g;
    char n[10];
    unsigned int counter;
    short k, shori, xx, nrn;
    unsigned long i, j;
    long kk, kk11, kk12, kk13, kk21, kk22, kk23, kk31, kk32, kk33, size;
    size = (long)lx * (long)ly;
    g = (char *)malloc(size);

    if(g == NULL)
    {
       // printf("error in allocating memory!\n");
        return;
    }

    f = (char *)image;
    for(i=0; i<lx; i++)
    {
        for(j=0; j<ly; j++)
        {
            kk=i*ly+j;
            if(f[kk]!=0)
            {
                f[kk]=1;
                g[kk]=f[kk];
            }
        }
    }

    counter = 1;

    do
    {
        
        counter++;
        shori = 0;

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

        for(i=1; i<lx-1; i++)
        {
            for(j=1; j<ly-1; j++)
            {
                kk=i*ly+j;

                if(f[kk]!=1)
                    continue;

                kk11 = (i-1)*ly+j-1;
                kk12 = kk11 + 1;
                kk13 = kk12 + 1;
                kk21 = i*ly+j-1;
                kk22 = kk21 + 1;
                kk23 = kk22 + 1;
                kk31 = (i+1)*ly+j-1;
                kk32 = kk31 + 1;
                kk33 = kk32 + 1;

                if((g[kk12]&&g[kk21]&&g[kk23]&&g[kk32])!=0)
                    continue;

                nrn = g[kk11] + g[kk12] + g[kk13] + g[kk21] + g[kk23] + 
                    g[kk31] + g[kk32] + g[kk33];

                if(nrn <= 1)
                {
                    f[kk22] = 2;
                    continue;
                }

                n[4] = f[kk11];
                n[3] = f[kk12];
                n[2] = f[kk13];
                n[5] = f[kk21];
                n[1] = f[kk23];
                n[6] = f[kk31];
                n[7] = f[kk32];
                n[8] = f[kk33];
                n[9] = n[1];
                xx = 0;

                for(k=1; k<8; k=k+2)
                {
                    if((!n[k])&&(n[k+1]||n[k+2]))
                        xx++;
                }

                if(xx!=1)
                {
                    f[kk22] = 2;
                    continue;
                }

                if(f[kk12] == -1)
                {
                    f[kk12] = 0;
                    n[3] = 0;
                    xx = 0;

                    for(k=1; k<8; k=k+2)
                    {
                        if((!n[k])&&(n[k+1]||n[k+2]))
                            xx++;
                    }

                    if(xx != 1)
                    {
                        f[kk12] = -1;
                        continue;
                    }

                    f[kk12] = -1;
                    n[3] = -1;
                }

                if(f[kk21]!=-1)
                {
                    f[kk22] = -1;
                    shori = 1;
                    continue;
                }

                f[kk21] = 0;
                n[5] = 0;
                xx = 0;

                for(k=1; k<8; k=k+2)
                {
                    if((!n[k])&&(n[k+1]||n[k+2]))
                    {
                        xx++;
                    }
                }

                if(xx == 1)
                {
                    f[kk21] = -1;
                    f[kk22] = -1;
                    shori =1;
                }
                else
                    f[kk21] = -1;
            }
        }
    }while(shori);

    free(g);
}

/**************************************************
* 函數名稱:
*     ThinnerRosenfeld
*
* 參數:
*   void*     image             -二值化圖像矩陣前景色為1背景色為0
*   unsigned  longlx             -圖像的寬度
*   unsigned  longly             -圖像的高度
*
* 返回值
*       無
*
*函數功能:
*       對輸入的圖像進行細化,輸出細化后的圖像
***********************************************************/
void ThinnerRosenfeld(void *image, unsigned long lx, unsigned long ly)
{
    char *f, *g;
    char n[10];
    char a[5] = {0, -1, 1, 0, 0};
    char b[5] = {0, 0, 0, 1, -1};
    char nrnd, cond, n48, n26, n24, n46, n68, n82, n123, n345, n567, n781;
    short k, shori;
    unsigned long i, j;
    long ii, jj, kk, kk1, kk2, kk3, size;
    size = (long)lx * (long)ly;

    g = (char *)malloc(size);
    if(g==NULL)
    {
        printf("error in alocating mmeory!\n");
        return;
    }

    f = (char *)image;
    for(kk=0l; kk<size; kk++)
    {
        g[kk] = f[kk];
    }

    do
    {
        shori = 0;
        for(k=1; k<=4; k++)
        {
            for(i=1; i<lx-1; i++)
            {
                ii = i + a[k];

                for(j=1; j<ly-1; j++)
                {
                    kk = i*ly + j;

                    if(!f[kk])
                        continue;

                    jj = j + b[k];
                    kk1 = ii*ly + jj;

                    if(f[kk1])
                        continue;

                    kk1 = kk - ly -1;
                    kk2 = kk1 + 1;
                    kk3 = kk2 + 1;
                    n[3] = f[kk1];
                    n[2] = f[kk2];
                    n[1] = f[kk3];
                    kk1 = kk - 1;
                    kk3 = kk + 1;
                    n[4] = f[kk1];
                    n[8] = f[kk3];
                    kk1 = kk + ly - 1;
                    kk2 = kk1 + 1;
                    kk3 = kk2 + 1;
                    n[5] = f[kk1];
                    n[6] = f[kk2];
                    n[7] = f[kk3];

                    nrnd = n[1] + n[2] + n[3] + n[4]
                        +n[5] + n[6] + n[7] + n[8];
                    if(nrnd<=1)
                        continue;

                    cond = 0;
                    n48 = n[4] + n[8];
                    n26 = n[2] + n[6];
                    n24 = n[2] + n[4];
                    n46 = n[4] + n[6];
                    n68 = n[6] + n[8];
                    n82 = n[8] + n[2];
                    n123 = n[1] + n[2] + n[3];
                    n345 = n[3] + n[4] + n[5];
                    n567 = n[5] + n[6] + n[7];
                    n781 = n[7] + n[8] + n[1];

                    if(n[2]==1 && n48==0 && n567>0)
                    {
                        if(!cond)
                            continue;
                        g[kk] = 0;
                        shori = 1;
                        continue;
                    }

                    if(n[6]==1 && n48==0 && n123>0)
                    {
                        if(!cond)
                            continue;
                        g[kk] = 0;
                        shori = 1;
                        continue;
                    }

                    if(n[8]==1 && n26==0 && n345>0)
                    {
                        if(!cond)
                            continue;
                        g[kk] = 0;
                        shori = 1;
                        continue;
                    }

                    if(n[4]==1 && n26==0 && n781>0)
                    {
                        if(!cond)
                            continue;
                        g[kk] = 0;
                        shori = 1;
                        continue;
                    }

                    if(n[5]==1 && n46==0)
                    {
                        if(!cond)
                            continue;
                        g[kk] = 0;
                        shori = 1;
                        continue;
                    }

                    if(n[7]==1 && n68==0)
                    {
                        if(!cond)
                            continue;
                        g[kk] = 0;
                        shori = 1;
                        continue;
                    }

                    if(n[1]==1 && n82==0)
                    {
                        if(!cond)
                            continue;
                        g[kk] = 0;
                        shori = 1;
                        continue;
                    }

                    if(n[3]==1 && n24==0)
                    {
                        if(!cond)
                            continue;
                        g[kk] = 0;
                        shori = 1;
                        continue;
                    }

                    cond = 1;
                    if(!cond)
                        continue;
                    g[kk] = 0;
                    shori = 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品一区二区三区| 精彩视频一区二区三区| 91精品国产乱码| 成人综合在线观看| 亚洲美女屁股眼交3| 日韩欧美国产三级| av动漫一区二区| 国产精品资源在线看| 日韩国产高清影视| 天堂资源在线中文精品| 亚洲色图欧洲色图| 亚洲欧美综合色| 国产精品色一区二区三区| 欧美国产国产综合| 最新不卡av在线| 国产精品久久看| 国产精品久久福利| 日韩理论片一区二区| 亚洲一区在线观看免费观看电影高清| 国产日本一区二区| 亚洲国产高清在线观看视频| 国产欧美日韩亚州综合 | 免费在线看成人av| 美女一区二区久久| 久久99国内精品| 国产成人夜色高潮福利影视| 国产精品99久久久久久久vr| 成人在线综合网| 91黄色免费网站| 国产成人精品一区二| 国产乱码字幕精品高清av| 3751色影院一区二区三区| 亚洲精品国产高清久久伦理二区| 国产成人精品免费| 国产日韩影视精品| 丰满白嫩尤物一区二区| 欧美一区二区大片| 中文字幕一区二区在线观看| 青青草国产精品97视觉盛宴| 91理论电影在线观看| 精品国产一区二区精华| 又紧又大又爽精品一区二区| 久久精品免费观看| 国产精品每日更新在线播放网址 | 精品成人在线观看| 亚洲mv在线观看| 色综合天天综合狠狠| 欧美精品一区二区在线观看| 天天操天天干天天综合网| 99国产一区二区三精品乱码| 精品电影一区二区| 日本成人在线一区| 91麻豆精品国产自产在线| 亚洲小说春色综合另类电影| www.日韩av| 中文字幕在线不卡视频| 国产精品91xxx| 久久久精品黄色| 亚洲成a人片综合在线| 色综合欧美在线视频区| 国产精品久久久久毛片软件| 国产二区国产一区在线观看| 久久午夜免费电影| 毛片av中文字幕一区二区| 91精品国产综合久久久久久久 | 5858s免费视频成人| 亚洲成人免费av| 3atv一区二区三区| 韩国欧美一区二区| 久久品道一品道久久精品| 国产激情偷乱视频一区二区三区| 久久久久久一级片| 成人avav影音| 亚洲在线中文字幕| 在线播放91灌醉迷j高跟美女 | 亚洲综合色在线| 欧美性猛交xxxxxx富婆| 亚洲高清免费视频| 日韩精品一区二| 99视频一区二区| 日本最新不卡在线| 国产精品欧美极品| 91麻豆精品国产91久久久更新时间| 国产一区二区三区四| 亚洲国产日韩精品| 亚洲欧洲精品天堂一级| 精品久久久网站| 欧美日韩美少妇| 成人国产一区二区三区精品| 蓝色福利精品导航| 天堂成人免费av电影一区| 亚洲人123区| 国产亚洲午夜高清国产拍精品| 成人网页在线观看| 久久疯狂做爰流白浆xx| 亚洲欧美日韩系列| 国产色一区二区| 欧美精品aⅴ在线视频| 色综合婷婷久久| 丁香五精品蜜臀久久久久99网站| 日本欧美加勒比视频| 亚洲精品亚洲人成人网| 中文字幕免费一区| 国产视频在线观看一区二区三区| 精品视频一区二区不卡| 一本久道中文字幕精品亚洲嫩| 国产一区二区三区在线观看免费 | 中文文精品字幕一区二区| 欧美一个色资源| 7777精品伊人久久久大香线蕉| 91国产免费观看| 91小宝寻花一区二区三区| 91猫先生在线| 在线国产电影不卡| 91福利资源站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产99久久久国产精品| 高清不卡一区二区| 欧美一级久久久| 日韩免费观看高清完整版在线观看| 日韩一区中文字幕| 亚洲欧美一区二区三区极速播放 | 国产精品无人区| 自拍偷拍国产精品| 亚洲第一久久影院| 婷婷中文字幕综合| 久久99国产精品久久99果冻传媒| 免费在线一区观看| 国产·精品毛片| 在线观看国产日韩| 综合亚洲深深色噜噜狠狠网站| 成人免费在线观看入口| 玉足女爽爽91| 久久国产精品色| 成人av在线电影| 欧美日韩国产精品自在自线| 亚洲欧美日韩国产另类专区| 一区二区三区日韩| 国产毛片一区二区| 91国内精品野花午夜精品| 欧美精品aⅴ在线视频| 国产欧美va欧美不卡在线| 亚洲一区二区黄色| 国产精品亚洲人在线观看| 在线一区二区三区| 五月天亚洲精品| 成人免费视频caoporn| 欧美三级电影网| 中文字幕乱码日本亚洲一区二区| 亚欧色一区w666天堂| www.色综合.com| 欧美精品一区二区三| 亚洲国产精品久久艾草纯爱 | 国产精品中文字幕欧美| 欧美精品一二三| 亚洲狠狠丁香婷婷综合久久久| 丁香六月久久综合狠狠色| 日韩午夜在线播放| 日韩 欧美一区二区三区| 欧美三级一区二区| 亚洲愉拍自拍另类高清精品| 成人av在线资源网站| 国产精品嫩草久久久久| 狠狠色狠狠色合久久伊人| 宅男在线国产精品| 奇米777欧美一区二区| 欧美日韩大陆一区二区| 亚洲夂夂婷婷色拍ww47| 欧美三级资源在线| 亚洲午夜免费视频| 精品视频在线视频| 亚洲成a人v欧美综合天堂| 欧美在线免费观看视频| 亚洲国产成人av网| 欧美不卡一区二区三区| 久久99热狠狠色一区二区| 精品国产髙清在线看国产毛片| 紧缚奴在线一区二区三区| 欧美国产精品专区| 色噜噜狠狠色综合中国| 婷婷开心久久网| 久久久久久免费毛片精品| 高清不卡在线观看| 亚洲愉拍自拍另类高清精品| 91麻豆精品国产91久久久久久| 久久99精品国产麻豆婷婷| 国产精品无人区| 欧美日韩成人一区| 国产精品一区二区免费不卡| 最新欧美精品一区二区三区| 91精品国产综合久久精品麻豆| 狠狠色丁香九九婷婷综合五月| 国产精品女同一区二区三区| 欧美日本在线播放| 国产精品亚洲一区二区三区妖精 | 国产成人综合亚洲91猫咪| 午夜精品久久一牛影视| 久久影院电视剧免费观看| 欧美三片在线视频观看| 成人免费视频播放|