数字图像处理纸牌识别课程设计Word下载.docx

上传人:b****5 文档编号:17290300 上传时间:2022-11-30 格式:DOCX 页数:23 大小:355.09KB
下载 相关 举报
数字图像处理纸牌识别课程设计Word下载.docx_第1页
第1页 / 共23页
数字图像处理纸牌识别课程设计Word下载.docx_第2页
第2页 / 共23页
数字图像处理纸牌识别课程设计Word下载.docx_第3页
第3页 / 共23页
数字图像处理纸牌识别课程设计Word下载.docx_第4页
第4页 / 共23页
数字图像处理纸牌识别课程设计Word下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数字图像处理纸牌识别课程设计Word下载.docx

《数字图像处理纸牌识别课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《数字图像处理纸牌识别课程设计Word下载.docx(23页珍藏版)》请在冰豆网上搜索。

数字图像处理纸牌识别课程设计Word下载.docx

CDIBcutmask;

CDIBforcut;

CDIBmasknumber;

CDIBmasktype;

用于存放,处理和显示图片。

制作菜单每个对于图像处理功能,一个按键调用一个处理函数,也可一个按键调用多个处理函数。

菜单及其功能如下图

打开图像的代码为功能为大开所处理图像:

voidCPokeridentifyView:

:

OnOpenimage()

{

//TODO:

Addyourcommandhandlercodehere

staticcharszFilter[]="

BMP文件(*.bmp)|*.bmp||"

;

//定义过滤文件的类型

CFileDialogdlg(TRUE,"

bmp"

NULL,

OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);

//定义文件对话框对象

CStringfilename;

intret=dlg.DoModal();

//运行打开文件对方框

if(ret==IDOK)

{

filename=dlg.GetFileName();

//获取所选择图像的路径

m_dib.LoadFromFile(filename);

//加载图像

if(!

m_dib.m_bLoaded)//判断是否加载图像成功

{

AfxMessageBox("

图像打不开"

);

return;

}

mid_boader.LoadFromFile(filename);

mid_boader.m_bLoaded)//判断是否加载图像成功

boaer_crect.LoadFromFile(filename);

boaer_crect.m_bLoaded)//判断是否加载图像成功

cutmask.LoadFromFile("

TTcut.bmp"

cutmask.m_bLoaded)//判断是否加载图像成功

forcut.LoadFromFile(filename);

forcut.m_bLoaded)//判断是否加载图像成功

masknumber.LoadFromFile("

1.bmp"

masknumber.m_bLoaded)//判断是否加载图像成功masktype

masktype.LoadFromFile("

111.bmp"

masktype.m_bLoaded)//判断是否加载图像成功

}}

打开一图片后为:

中值滤波的代码为:

OnMidiamaskImage()

m_dib.m_bLoaded)

{

AfxMessageBox("

图像还打开,请先打开图像!

"

return;

}

//获取图像宽和高

intnw=m_dib.GetDIBWidth();

intnh=m_dib.GetDIBHeight();

inti,j;

BYTE*ptemp=(BYTE*)newBYTE[nw*nh];

memset(ptemp,0,nw*nh);

doublemid[9];

for(j=3/2;

j<

nh-3/2;

j++)

for(i=3/2;

i<

nw-3/2;

i++)

{doubleresult=0;

intk,h;

for(k=0;

k<

3;

k++)//k行h列

for(h=0;

h<

h++)

{

mid[k*3+h]=m_dib.m_pdata[(j-k)*nw+i-h];

intii,jj,tempmid;

doublesweep;

for(ii=0;

ii<

8;

ii++)

{

tempmid=ii;

for(jj=ii;

jj<

=8;

jj++)

{

if(mid[jj]<

mid[tempmid])tempmid=jj;

}

sweep=mid[ii];

mid[ii]=mid[tempmid];

mid[tempmid]=sweep;

}

result=mid[4];

if(result>

255)result=255;

if(result<

0)result=0;

ptemp[j*nw+i]=result;

memcpy(m_dib.m_pdata,ptemp,nw*nh);

m_dib.UpdateData();

memcpy(mid_boader.m_pdata,ptemp,nw*nh);

mid_boader.UpdateDatadup();

delete[]ptemp;

//刷新屏幕

Invalidate();

调用后结果为:

全局门限的代码中先计算图像的直方图,以一个点(一般去中间值)把直方图分成两份,分别计算两部分的灰度均值,m1与m2,由(m1+m2)/2得到新的阈值与灰度分割点,知道新阈值与旧的阈值相差不到。

用新的阈值进行二值化。

代码为:

OnAllthrImage()

if(!

}//获取图像宽和高

doublep[256];

//存放直方图

intthrold=200,thrnew=210,m1=0,m2=0;

//匹配时用180

for(i=0;

256;

p[i]=0;

for(j=0;

nh;

for(i=0;

nw;

p[m_dib.m_pdata[j*nw+i]]++;

//统计各像素总数

p[i]=p[i]*1.0/(nw*nh);

//直方图归一化

do

throld=thrnew;

=throld;

m1=m1+p[i]*i;

for(i=throld+1;

m2=m2+p[i]*i;

thrnew=(m1+m2)/2;

while(abs(thrnew=throld)<

5);

//对图像的第j行、第i列的象素的灰度信息进行判断,修改

if(m_dib.m_pdata[j*nw+i]>

thrnew)

m_dib.m_pdata[j*nw+i]=255;

else

m_dib.m_pdata[j*nw+i]=0;

//将修改的m_pdata的数据赋值给m_pDIBData,以显示修改的结果

memcpy(mid_boader.m_pdata,m_dib.m_pdata,nw*nh);

mid_boader.UpdateData();

}结果为:

对图像进行边缘检测的代码为:

OnFindborderImage()

doublemask[3][3]={-1,-1,-1,-1,8,-1,-1,-1,-1};

doubleresult=0;

intk,h;

for(k=0;

k++)

for(h=0;

result+=mask[k][h]*m_dib.m_pdata[(j-k)*nw+i-h];

if(result>

if(result<

ptemp[j*nw+i]=result;

m_dib.UpdateData();

memcpy(boaer_crect.m_pdata,ptemp,nw*nh);

boaer_crect.UpdateData();

//刷新屏幕

结果为:

对图片进行测量并平移校正的代码为:

OnAutomoveImage()

intmovedownj,moverighti;

//移动像素距离

inth,k;

inttemp;

intnwmove[7],nhmove[7];

intnwmlength[7]={600,600,600,600,600,600,600},nhmlength[7]={600,600,600,600,600,600,600};

intbnw,bnh;

7;

{nhmove[i]=nh*(i+1)/8;

nwmove[i]=nw*(i+1)/8;

for(k=0;

k++)//寻找水平距离

{for(i=0;

{if(m_dib.m_pdata[nhmove[k]*nw+i]!

=0)

{nhmlength[k]=i;

break;

}

k++)//寻找竖直距离

{for(j=nh;

j>

0;

j--)

{if(m_dib.m_pdata[j*nw+nwmove[k]]!

{nwmlength[k]=nh-j;

6;

i++)//水平测量量nhmlegnth的排列

{k=i;

for(j=i;

{if(nhmlength[j]<

nhmlength[k])k=j;

temp=nhmlength[k];

nhmlength[k]=nhmlength[i];

nhmlength[i]=temp;

bnw=nhmlength[0];

for(i=0;

i++)//竖直测量量nwmlength的排列

{k=i;

for(j=i;

{if(nwmlength[j]<

nwmlength[k])k=j;

temp=nwmlength[k];

nwmlength[k]=nwmlength[i];

nwmlength[i]=temp;

bnh=nwmlength[0];

movedownj=-bnh;

moverighti=-bnw;

j++)//进行平移

{h=j-movedownj;

k=i+moverighti;

if(h>

0&

&

nh&

k>

nw)

ptemp[h*nw+k]=m_dib.m_pdata[j*nw+i];

m_dib.UpdateData();

memcpy(boaer_crect.m_pdata,ptemp,nw*nh);

boaer_crect.UpdateDatadup();

//刷新屏幕

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

{h=j-movedownj;

ptemp[h*nw+k]=forcut.m_pdata[j*nw+i];

memcpy(forcut.m_pdata,ptemp,nw*nh);

forcut.UpdateData();

}

OnRecreactImage()

{//TODO:

if(!

m_dib.m_bLoaded)

{AfxMessageBox("

BYTE*ptemp=(BYTE*)newBYTE[nw*nh];

intbnh;

intmoveup=500;

if(m_dib.m_pdata[j*nw+50]==255)

{moveup=j;

break;

bnh=moveup;

movedownj=bnh;

moverighti=0;

for(j=0;

h=j+movedownj;

k=i-moverighti;

ptemp[h*nw+k]=m_dib.m_pdata[j*nw+i];

平移结果为:

截取特权的代码为:

OnCrectGetfeature()

cutmask.m_bLoaded)

{AfxMessageBox("

intnw1=cutmask.GetDIBWidth();

intnh1=cutmask.GetDIBHeight();

for(j=nh-nh1;

{for(i=0;

nw1;

{cutmask.m_pdata[(j-(nh-nh1))*nw1+i]=forcut.m_pdata[j*nw+i];

cutmask.UpdateDatadup();

对特征进行处理并加载模板,进行匹配,并显示匹配结果的代码为:

OnFeatureRecognize()

intnw=cutmask.GetDIBWidth();

intnh=cutmask.GetDIBHeight();

intk,h,t;

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

//特征增强

intthrold=200,thrnew=180,m1=0,m2=0;

{p[cutmask.m_pdata[j*nw+i]]++;

{p[i]=p[i]*1.0/(nw*nh);

{throld=thrnew;

{m1=m1+p[i]*i;

{m2=m2+p[i]*i;

{//对图像的第j行、第i列的象素的灰度信息进行判断,修改

if(cutmask.m_pdata[j*nw+i]>

ptemp[j*nw+i]=255;

ptemp[j*nw+i]=0;

memcpy(cutmask.m_pdata,ptemp,nw*nh);

cutmask.UpdateData();

//识别

intcardnumber;

floatnuberthr=0.9;

floattypethr=0.92;

CStringfilename;

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1