您的当前位置:首页正文

车牌定位的完整源代码BP - READ

2021-03-03 来源:汇智旅游网
西南科技大学本科生毕业论文

车牌定位的完整源代码 bp.h

void CTypeRecView::OnTest145()

{

CTypeRecDoc* pDoc=GetDocument(); //获得文档

LPSTR lpDIB; //指向DIB的指针

long lWidth; //图像宽度和高度

long lHeight;

lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());//获得当前位图

lWidth = ::DIBWidth(lpDIB); //DIB 宽度

lHeight = ::DIBHeight(lpDIB); //DIB 高度

//水平投影,求取车牌子图像的上下边缘位置

//

myHprojectDIB(lpDIB, lWidth, lHeight,&m_ipzTop, &m_ipzBottom) ;

1

西南科技大学本科生毕业论文

m_ipzLeft=0;

m_ipzRight=lWidth;

//对含车牌图像进行剪裁,得到车牌高度,原图像宽度的图像

// OnTempSubrect();

HDIB hDIB;

HDIB hNewDIB;

hDIB=pDoc->GetHDIB();

//假定的剪裁区域(车牌附近)

//

CRect rect(m_ipzLeft,m_ipzTop,m_ipzRight,m_ipzBottom);

hNewDIB= myCropDIB(hDIB,rect);

// 判断是否剪裁成功

if (hNewDIB != NULL)

2

西南科技大学本科生毕业论文

{

// 获取文档

CTypeRecDoc* pDoc = GetDocument();

// 替换DIB,同时释放旧DIB对象

pDoc->ReplaceHDIB(hNewDIB);

// 更新DIB大小和调色板

pDoc->InitDIBData();

// 设置脏标记

pDoc->SetModifiedFlag(TRUE);

// 实现新的调色板

OnDoRealize((WPARAM)m_hWnd,0);

}

//5

3

西南科技大学本科生毕业论文

lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());//获得当前位图

lWidth = ::DIBWidth(lpDIB); //DIB 宽度

lHeight =::DIBHeight(lpDIB); //DIB 高度

myVprojectDIB(lpDIB, lWidth, lHeight,&m_ipzLeft, &m_ipzRight) ;

pDoc->UpdateAllViews(NULL);

::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());

}

/*************************************************************************

*

* 函数名称:

* myHprojectDIB()

*

* 参数:

4

西南科技大学本科生毕业论文

* LPSTR lpDIBBits - 指向源DIB图像指针

* LONG lWidth - 源图像宽度(象素数)

* LONG lHeight - 源图像高度(象素数)

* INT* iTop - 车牌上边缘

* INT* iBottom - 车牌下边缘

* 返回值:

* BOOL - 成功返回TRUE,否则返回FALSE。

*

* 说明:

* 该函数用于对含车牌图像进行水平投影运算,求取车牌子图像的上下边缘位置

*

************************************************************************/

BOOL WINAPI myHprojectDIB(LPSTR lpDIB, LONG lWidth, LONG lHeight,

5

西南科技大学本科生毕业论文

int* iTop, int* iBottom)

{

LPSTR lpDIBBits; //指向DIB的象素的指针

LONG lLineBytes; // 图像每行的字节数

unsigned char * lpSrc; //指向原图像象素点的指针

unsigned char pixel; //像素值

int i,j;

// 计算结果

INT* iResult;

INT pzBottom,pzTop;

bool findPZ=false;

// 找到DIB图像象素起始位置

lpDIBBits = ::FindDIBBits(lpDIB);

6

西南科技大学本科生毕业论文

// 计算图像每行的字节数

lLineBytes = WIDTHBYTES(lWidth * 8);

iResult=new INT[lHeight];

for(i=0;iiResult[i]=0;

for(j=lHeight/5;j{

iResult[j]=0;

for(i=0;i{

lpSrc=(unsigned char*)lpDIBBits+lLineBytes*j+i;

pixel=(unsigned char)(*lpSrc);

if(pixel==255)

7

西南科技大学本科生毕业论文

{

iResult[j]++;

}

}

if((!findPZ)&&iResult[j]>12)

{

pzBottom=j;

findPZ=true;

}

if(findPZ&&iResult[j]<12)

{

pzTop=j;

break;

8

西南科技大学本科生毕业论文

}

}

pzTop=pzBottom+55;

pzBottom=pzBottom-20; //微量调整

*iBottom=lHeight-pzBottom;

*iTop=lHeight-pzTop;

return true;

}

/*************************************************************************

*

* 函数名称:

* myVprojectDIB()

*

9

西南科技大学本科生毕业论文

* 参数:

* LPSTR lpDIBBits - 指向源DIB图像指针

* LONG lWidth - 源图像宽度(象素数)

* LONG lHeight - 源图像高度(象素数)

* INT* iLeft - 车牌左边缘

* INT* iRight - 车牌右边缘

* 返回值:

* BOOL - 成功返回TRUE,否则返回FALSE。

*

* 说明:

* 该函数用于对含车牌图像进行垂直投影运算,求取车牌子图像的左右边缘位置

*

************************************************************************/

10

西南科技大学本科生毕业论文

BOOL WINAPI myVprojectDIB(LPSTR lpDIB, LONG lWidth, LONG lHeight,

int* iLeft, int* iRight)

{

LPSTR lpDIBBits; LONG lLineBytes; unsigned char * lpSrc; unsigned char pixel; int i,j;

// 计算结果

INT* iResult;

INT pzLeft,pzRight;

bool findPZ=false;

// 找到DIB图像象素起始位置

//指向DIB的象素的指针

// 图像每行的字节数

//指向原图像象素点的指针

//像素值

11

西南科技大学本科生毕业论文

lpDIBBits = ::FindDIBBits(lpDIB);

// 计算图像每行的字节数

lLineBytes = WIDTHBYTES(lWidth * 8);

iResult=new INT[lWidth];

for(i=0;iiResult[i]=0;

for(i=lWidth/5;i{

iResult[i]=0;

for(j=0;j{

lpSrc=(unsigned char*)lpDIBBits+lLineBytes*j+i;

pixel=(unsigned char)(*lpSrc);

12

西南科技大学本科生毕业论文

if(pixel==255)

{

iResult[i]++;

}

}

if((!findPZ)&&iResult[i]>10)

{

pzLeft=i;

findPZ=true;

}

pzRight=pzLeft+150;

}

*iLeft=pzLeft-10;

13

西南科技大学本科生毕业论文

*iRight=pzRight+10;

return true;

}

14

因篇幅问题不能全部显示,请点此查看更多更全内容