图像预处理第8步:紧缩重排数字字符
生活随笔
收集整理的這篇文章主要介紹了
图像预处理第8步:紧缩重排数字字符
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
//圖像預處理第8步:緊縮重排已經(jīng)分割完畢的數(shù)字字符,并形成新的位圖句柄
void CChildView::OnImgprcShrinkAlign()
{m_hDIB=AutoAlign(m_hDIB);//在屏幕上顯示位圖CDC* pDC=GetDC();DisplayDIB(pDC,m_hDIB); DrawFrame(pDC,m_hDIB,m_charRect,1,RGB(252,115,27));
} /*******************************************
*
* 函數(shù)名稱:
* AutoAlign()
*
* 參數(shù):
* HDIB hDIB -原圖像的句柄
*
* 返回值
* HDIB -緊縮排列后的新圖像的句柄
*
* 功能:
* 將經(jīng)過了標準化處理的字符進行規(guī)整的排列,以方便下一步的處理
*
* 說明:
* 緊縮排列的操作必須在標準化操作之后進行
*
********************************************************/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() ;//建立一個新的圖像正好能夠?qū)藴驶淖址⑴欧胖?/span>HDIB hNewDIB=::NewDIB (digicount*w,h,8);//指向新的圖像的指針BYTE* lpNewDIB=(BYTE*) ::GlobalLock((HGLOBAL)hNewDIB);//指向象素起始位置的指針BYTE* lpNewDIBBits=(BYTE*)::FindDIBBits((char*)lpNewDIB);//指向象素的指針BYTE* lpDst=lpNewDIBBits;//計算原圖像每行的字節(jié)數(shù)LONG lLineBytes=(lWidth+3)/4*4;//計算新圖像每行的字節(jié)數(shù)LONG lLineBytesnew =(digicount*w+3)/4*4;//將新的圖像初始化為白色memset(lpDst,(BYTE)255,lLineBytesnew * h);//映射操作的坐標變量int i_src,j_src;//循環(huán)變量int i,j;//統(tǒng)計字符個數(shù)的變量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);//將原矩形框內(nèi)的象素映射到新的矩形框中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;}}//字符個數(shù)加1counts++;}//將獲得的新的鏈表復制到原鏈表中,以方便下一次的調(diào)用m_charRect=m_charRectCopy;//解除鎖定
::GlobalUnlock (hDIB);::GlobalUnlock (hNewDIB);return hNewDIB;
}
運行結果:
轉(zhuǎn)載于:https://www.cnblogs.com/Bobby0322/p/5408480.html
總結
以上是生活随笔為你收集整理的图像预处理第8步:紧缩重排数字字符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代码动态创建checkbox
- 下一篇: 第三方登录之微信登录,基于ThinkSD