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

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

?? mydiblib.h

?? 本系統是一個基于神經網絡的文字識別系統
?? 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一区二区三区免费野_久草精品视频
黑人巨大精品欧美一区| 亚洲一区二区在线免费观看视频| 在线亚洲免费视频| 91色porny在线视频| 成人99免费视频| 9人人澡人人爽人人精品| 成人性生交大合| www.日韩大片| 精品粉嫩aⅴ一区二区三区四区| 日韩欧美一区二区免费| 欧美精品一区二区三区一线天视频| 国产精品不卡一区二区三区| 亚洲欧美一区二区视频| 一区二区三区免费在线观看| 亚洲成人激情自拍| 九九九精品视频| 成人理论电影网| 日韩免费福利电影在线观看| 婷婷中文字幕综合| 激情欧美一区二区| 欧美精品一二三| 国产欧美在线观看一区| 亚洲精品高清在线观看| 美洲天堂一区二卡三卡四卡视频| 国产一区在线观看麻豆| 91在线国产观看| 欧美一激情一区二区三区| 国产亚洲精品福利| 亚洲国产成人高清精品| 国产成人亚洲综合a∨婷婷| 欧美性色黄大片| 久久久久久久网| 午夜国产精品一区| 欧美日韩激情一区二区| 国产精品伦理在线| 日韩国产精品久久久| 成人av网站在线观看免费| 国产三级三级三级精品8ⅰ区| 久久99精品久久久久久| 2023国产精品| 亚洲成人动漫在线免费观看| 欧美日韩黄视频| 婷婷国产v国产偷v亚洲高清| 6080日韩午夜伦伦午夜伦| 成人免费一区二区三区在线观看| 成人精品免费网站| 国产精品成人免费精品自在线观看| 成人精品免费视频| 亚洲欧美激情小说另类| 成人综合在线网站| 亚洲视频免费在线观看| 成人综合在线视频| 亚洲男人天堂av| 欧美日韩一区二区在线观看视频| 国产女人aaa级久久久级| 成人天堂资源www在线| √…a在线天堂一区| 欧美视频在线一区| 免费观看成人av| 欧美乱熟臀69xxxxxx| 蜜臀av一级做a爰片久久| 久久久91精品国产一区二区精品 | 精品国产一区二区精华| 国产一区二区91| 亚洲少妇屁股交4| 欧美日韩国产成人在线91| 国模套图日韩精品一区二区| 国产精品传媒入口麻豆| 91精品国产综合久久精品麻豆| 国产午夜精品理论片a级大结局 | 99久久精品99国产精品| 亚洲成人激情综合网| 久久日韩精品一区二区五区| 不卡视频在线看| 日本中文字幕一区二区视频| 国产日韩欧美a| 欧美性感一区二区三区| 国产一区二区视频在线| 一区二区三区四区在线播放 | 欧美性受极品xxxx喷水| 精品一区二区三区不卡| 亚洲裸体在线观看| 2023国产精品自拍| 欧美精品自拍偷拍| www.欧美亚洲| 黄色日韩三级电影| 亚洲一卡二卡三卡四卡无卡久久| 亚洲一级电影视频| 日本道精品一区二区三区 | 99精品久久久久久| 免费在线观看不卡| 亚洲一区中文在线| 中文字幕第一区第二区| 成人激情动漫在线观看| 午夜国产不卡在线观看视频| 中文字幕日韩精品一区| 久久这里只精品最新地址| 欧美亚洲高清一区二区三区不卡| 国产成人综合网| 免费精品99久久国产综合精品| 日韩伦理av电影| 国产欧美日韩一区二区三区在线观看| 7777女厕盗摄久久久| 色偷偷久久一区二区三区| 石原莉奈一区二区三区在线观看| 51精品国自产在线| 91国偷自产一区二区开放时间| 国产99久久久国产精品免费看| 亚洲精品中文字幕乱码三区| 国产清纯美女被跳蛋高潮一区二区久久w| 欧美人狂配大交3d怪物一区| 91黄色在线观看| 91亚洲精品久久久蜜桃网站 | 日韩一区二区三区电影| 欧美天天综合网| 色婷婷激情久久| 在线观看一区二区视频| 91视频免费播放| 92精品国产成人观看免费| 成人aa视频在线观看| 99久久伊人久久99| 9i看片成人免费高清| 不卡的av中国片| 色偷偷久久人人79超碰人人澡| 91免费看视频| 在线观看日韩毛片| 欧美系列亚洲系列| 在线不卡a资源高清| 欧美一区二区三级| 欧美电视剧在线观看完整版| 日韩精品一区二区在线| 日韩午夜av电影| 日韩精品一区二区三区swag| 久久综合九色综合97婷婷 | 国产美女精品一区二区三区| 国内欧美视频一区二区| 国产精品中文欧美| 美女性感视频久久| 国产一区999| 成人黄色电影在线| 欧美综合天天夜夜久久| 制服丝袜中文字幕一区| 精品捆绑美女sm三区| 717成人午夜免费福利电影| 制服丝袜中文字幕一区| 精品国产成人在线影院 | 欧美一区二区在线播放| 精品国产欧美一区二区| 国产精品久久久久久一区二区三区 | 精品人伦一区二区色婷婷| 国产精品视频一区二区三区不卡| 亚洲欧美在线视频| 五月综合激情日本mⅴ| 国内精品写真在线观看| 色综合久久66| 精品免费国产二区三区| 亚洲婷婷综合久久一本伊一区| 亚洲成人av中文| 懂色av噜噜一区二区三区av| 在线看国产一区| 亚洲精品在线观| 亚洲免费观看高清完整| 老色鬼精品视频在线观看播放| 亚洲一区二区视频在线| 精久久久久久久久久久| 在线观看不卡一区| 26uuu欧美| 亚洲国产成人av| 9色porny自拍视频一区二区| 69久久夜色精品国产69蝌蚪网| 国产精品免费视频网站| 天天综合天天做天天综合| 国产成人综合网| 欧美一区二区三区在线观看| 日韩理论电影院| 国产一区二区调教| 欧美美女激情18p| 国产精品传媒在线| 国产原创一区二区| 欧美一级欧美三级| 一区二区三区 在线观看视频| 国产在线一区二区综合免费视频| 欧美亚洲综合久久| 亚洲欧美综合网| 国产传媒欧美日韩成人| 日韩精品一区二区三区视频播放| 亚洲高清视频的网址| 99久久精品免费看| 国产精品天干天干在观线| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩一级二级| 樱桃视频在线观看一区| 成人性色生活片免费看爆迷你毛片| 日韩一区二区在线看| 五月天激情综合| 欧美日韩精品欧美日韩精品一| 亚洲成a天堂v人片| 欧美撒尿777hd撒尿| 亚洲影视在线播放| 99国产精品久久久久|