本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx

上传人:b****2 文档编号:1709550 上传时间:2023-05-01 格式:DOCX 页数:22 大小:228.71KB
下载 相关 举报
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第1页
第1页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第2页
第2页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第3页
第3页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第4页
第4页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第5页
第5页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第6页
第6页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第7页
第7页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第8页
第8页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第9页
第9页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第10页
第10页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第11页
第11页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第12页
第12页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第13页
第13页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第14页
第14页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第15页
第15页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第16页
第16页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第17页
第17页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第18页
第18页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第19页
第19页 / 共22页
本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx

《本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx》由会员分享,可在线阅读,更多相关《本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx(22页珍藏版)》请在冰点文库上搜索。

本科毕业设计课程设计 基于vc的bmp图像二值化处理平台.docx

本科毕业设计课程设计基于vc的bmp图像二值化处理平台

课程设计说明书

学生姓名:

学号:

学生姓名:

学号:

学生姓名:

学号:

学生姓名:

学号:

学院:

中北大学信息商务学院

专业:

电子信息工程

题目:

专用基本技能实践:

基于VC的BMP图像二值化处理平台

 

指导教师:

陈平职称:

副教授

 

2014年12月26日

课程设计任务书

14/15学年第一学期

学院:

中北大学信息商务学院

专业:

电子信息工程

学生姓名:

学号:

学生姓名:

学号:

学生姓名:

学号:

学生姓名:

学号:

课程设计题目:

专用基本技能实践:

基于VC的BMP图像二值化处理平台

起迄日期:

2014年12月29日~2015年1月10日

课程设计地点:

C304教室

指导教师:

系主任:

下达任务书日期:

2014年12月26日

课程设计任务书

1.设计目的:

(1)掌握VC++程序开发平台;

(2)掌握对话框模式的可视化实现和按钮消息的响应;

(3)掌握应用VC++库函数实现BMP图像文件的打开、显示和二值化处理等功能。

2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):

(1)查阅相关资料,掌握基于面向对象的编程方法;

(2)主界面采用对话框或菜单模式,通过文件对话框,打开图像文件;

(3)通过控件控制关联,实现BMP图像数据的显示;

(4)通过对图像的灰度数据进行有条件的赋值,实现图像的二值化处理并显示。

(5)要求3位同学各自实现不同分工。

3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:

(1)要求设计组的每个成员都要了解设计的要求和思路;

(2)编写详细的设计说明书三份;

(3)要求有正确的运行结果及结果分析。

课程设计任务书

4.主要参考文献:

1王华,叶爱亮,祁立学等.VisualC++6.0编程实例与技巧.北京:

机械工业出版社,1999.

2李光明.VisualC++6.0经典实例大制作.北京:

中国人事出版社,2000.

3严华峰.VisualC++课程设计案例精编.北京:

中国水利水电出版社,2002.

4官章全,刘加明.VisualC++6.0类库大全.北京:

电子工业出版社,1999.

5张荣梅,梁晓林.VisualC++实用教程.北京:

冶金工业出版社,2004.

6魏亮,李春葆.VisualC++程序设计例学与实践.北京:

清华大学出版社,2006.

7陈清华,朱红.VisualC++课程设计案例精选与编程指导.南京:

东南大学出版社,2004.

5.设计成果形式及要求:

提供详细的设计说明书三份

软件设计结果

6.工作计划及进度:

2014年

12月29日~12月31日:

学习VC有关编程方法;

2015

1月1日~1月6日:

在指导教师指导下实现程序设计;

1月7日~1月9日:

撰写课程设计说明书;

1月10日:

答辩

系主任审查意见:

签字:

年月日

目录

 

一、设计目的----------------------------------------------------------------1

二、设计主要方案及理论介绍----------------------------1

三、设计主要步骤--------------------------------------2

四、运行结果------------------------------------------6

五、设计评述------------------------------------------7

六、参考文献------------------------------------------7

七、代码----------------------------------------------8

 

一、设计目的:

1.掌握VC++程序开发平台;

2.掌握对话框模式的可视化实现和按钮消息的响应;

3.掌握应用VC++库函数实现BMP图像文件的打开、显示和二值化处理等功能。

二、设计主要方案及理论介绍

通过vc实现bmp图像二值化处理

图像灰度变换模块

图像灰度变换模块实现了彩色图像变灰度格式,灰度图像变彩色格式和二值化操作。

经过分析图像灰度变换功能,得出图像处理的功能模块图如图4.4所示:

 

图灰度变换模块功能结构图

灰度变换类GrayTrans是在基类ImgCenterDib基础上派生出来的,灰度变换类设计代码如下:

classGrayTrans:

publicImgCenterDib

{

public:

intm_nBitCountOut;//输出图像每像素位数

unsignedchar*m_pImgDataOut;//输出图像位图数据指针

LPRGBQUADm_lpColorTableOut;//输出图像颜色表

private:

intm_imgWidthOut;//图像的宽,像素为单位

intm_imgHeightOut;//图像的高

intm_nColorTableLengthOut;//输出图像颜色表长度

public:

GrayTrans();//不带参数的构造函数

GrayTrans(CSizesize,intnBitCount,LPRGBQUADlpColorTable,

unsignedchar*pImgData);//带参数的构造函数

~GrayTrans();

CSizeGetDimensions();//以像素为单位返回输出图像的宽和高

voidBinary(intthreshold=128);//二值化

};

利用类向导,给相应的控件定义消息处理函数,如下表

表2主要的消息处理函数表

序号

ID号及类名

消息处理函数

函数功能

3

ID_BinTwo

OnBinTwo

二值化

在picture_sysView.cpp重载消息处理函数,这三个消息处理函数代码基本相似,共同操作伪代码如下:

 

三、设计主要步骤

新建

建立菜单找类文件名选择ClassView视图,编辑菜单资源选ResourceView视图。

单击File按Ctrl+w打开类向导

添加菜单处理函数

然后点击EditCode,直接复制代码就可

 

添加新类CDib类定义

在Dib.h中复制代码

添加类CDib类中处理函数定义

复制代码

 

程序运行,点击File,选择*.bmp文件,点击打开,在选择Process→2Value。

四、运行结果

原图

二值化处理后的图

5、设计评述

这次课程设计是以MicrosoftVisualC++6.0文档视图编程为基础实现的,这就要求对MFC文档视图操作有一定的了解和操作编程能力,在做课程设计前,我查阅了该方面相关的书籍,对我完成欢迎界面和主界面的设计有很大的帮助。

编程中在不同类之间函数参数和变量的传递和函数的调用出了问题,但是理清函数的编译编译顺序和变量的类型这些问题都逐一解决,同时增强了对工具栏,菜单栏的手动操作能力。

另外一点是对.bmp图像处理的实现,数字图像处理关键是算法的设计思想和算法的实现,通过这次课程设计,使我了解到了算法设计的重要性(算法设计是编程实现的前提),提高了自己动手编程的能力和汲取一些先进算法的思想,这对以后图像处理的深入学习大有帮助。

该数字图像界面是基于MicrosoftVisualC++6.0的MFC多文档实现的,在界面设计上看起来过于单调,界面设计简单,但易于操作;VisualC++6.0的MFC对话框的编程是界面看起来更加美观,更接近软件系统,给人不一样的感觉,提高了工具栏和菜单栏的编程实现难度和设计的复杂度,这是今后学习的方向。

六、参考文献:

[1]郑莉董渊张瑞丰,C++语言程序设计(第三版),清华大学出版社2003

[2]DavidJ.Kruglinski(美)等,VisualC++6.0技术内幕,北京希望电子出版社,2002

[3]谢凤英赵丹培,VisualC++数字图像处理,电子工业出版社,2008

[4]求是科技张宏林,精通VisualC++数字图像处理典型算法及实现,人民邮电出版社,2008

[5]刘锐宁宋坤等,VisualC++从入门到精通,清华大学出版社,2008

7、代码

//DIB.h

//添加新类CDib类定义

#ifndef__DIB_H__

#define__DIB_H__

#include"ShowDIB.h"

classCDib

{

public:

CDib();

~CDib();

BOOLDraw(CDC*pDC,intnX=-1,intnY=-1,intnWidth=-1,intnHeight=-1,intStyle=1);

BOOLSave(constchar*pszFilename);

BOOLLoad(constchar*);

BOOLSetPalette(CDC*);

//boolValid;

public:

intm_BitCount;

WORD*m_pWordData;

CPalettem_Palette;

unsignedchar*m_pDib,*m_pDibBits;

DWORDm_dwDibSize;

BITMAPINFOHEADER*m_pBIH;

RGBQUAD*m_pPalette;

intm_nPaletteEntries;

public:

boolConvertToTwoValue();

};

#endif

 

//DIB.cpp

//添加类CDib类中处理函数定义

#include"stdafx.h"

#include"DIB.h"

CDib:

:

CDib()

{

m_pDib=NULL;

m_pWordData=NULL;

}

CDib:

:

~CDib()

{

if(m_pDib!

=NULL)

delete[]m_pDib;

if(m_pWordData!

=NULL)

delete[]m_pWordData;

}

BOOLCDib:

:

Load(constchar*pszFilename)

{

CFilecf;

if(!

cf.Open(pszFilename,CFile:

:

modeRead))

return(FALSE);

DWORDdwDibSize;

dwDibSize=

cf.GetLength()-sizeof(BITMAPFILEHEADER);

pDib=newunsignedchar[dwDibSize];

if(pDib==NULL)

return(FALSE);

BITMAPFILEHEADERBFH;

try{

if(cf.Read(&BFH,sizeof(BITMAPFILEHEADER))

!

=sizeof(BITMAPFILEHEADER)||

BFH.bfType!

='MB'||

cf.Read(pDib,dwDibSize)!

=dwDibSize){

delete[]pDib;

return(FALSE);

}

}

catch(CFileException*e){

e->Delete();

delete[]pDib;

return(FALSE);

}

cf.Close();

if(m_pDib!

=NULL)

deletem_pDib;

m_pDib=pDib;

m_dwDibSize=dwDibSize;

m_pBIH=(BITMAPINFOHEADER*)m_pDib;

m_pPalette=

(RGBQUAD*)&m_pDib[sizeof(BITMAPINFOHEADER)];

m_nPaletteEntries=1<biBitCount;

if(m_pBIH->biBitCount>8)

m_nPaletteEntries=0;

elseif(m_pBIH->biClrUsed!

=0)

m_nPaletteEntries=m_pBIH->biClrUsed;

m_pDibBits=

&m_pDib[sizeof(BITMAPINFOHEADER)+

m_nPaletteEntries*sizeof(RGBQUAD)];

if(m_Palette.GetSafeHandle()!

=NULL)

m_Palette.DeleteObject();

if(m_nPaletteEntries!

=0){

LOGPALETTE*pLogPal=(LOGPALETTE*)newchar

[sizeof(LOGPALETTE)+

m_nPaletteEntries*sizeof(PALETTEENTRY)];

if(pLogPal!

=NULL){

pLogPal->palVersion=0x300;

pLogPal->palNumEntries=m_nPaletteEntries;

for(inti=0;i

pLogPal->palPalEntry[i].peRed=

m_pPalette[i].rgbRed;

pLogPal->palPalEntry[i].peGreen=

m_pPalette[i].rgbGreen;

pLogPal->palPalEntry[i].peBlue=

m_pPalette[i].rgbBlue;

}

m_Palette.CreatePalette(pLogPal);

delete[]pLogPal;

}

}

m_BitCount=8;

return(TRUE);

}

BOOLCDib:

:

Save(constchar*pszFilename)

{

if(m_pDib==NULL)

return(FALSE);

CFilecf;

if(!

cf.Open(pszFilename,

CFile:

:

modeCreate|CFile:

:

modeWrite))

return(FALSE);

try{

BITMAPFILEHEADERBFH;

memset(&BFH,0,sizeof(BITMAPFILEHEADER));

BFH.bfType='MB';

BFH.bfSize=sizeof(BITMAPFILEHEADER)+m_dwDibSize;

BFH.bfOffBits=sizeof(BITMAPFILEHEADER)+

sizeof(BITMAPINFOHEADER)+

m_nPaletteEntries*sizeof(RGBQUAD);

cf.Write(&BFH,sizeof(BITMAPFILEHEADER));

cf.Write(m_pDib,m_dwDibSize);

}

catch(CFileException*e){

e->Delete();

return(FALSE);

}

return(TRUE);

}

BOOLCDib:

:

Draw(CDC*pDC,intnX,intnY,intnWidth,intnHeight,intStyle)

{

longi,j;

if(m_pDib==NULL)

return(FALSE);

longvWidth=(4-m_pBIH->biWidth%4)%4+m_pBIH->biWidth;

/*if(m_BitCount!

=8)

{

for(i=0;ibiHeight;i++)

for(j=0;jbiWidth;j++)

{

*(m_pDibBits+i*vWidth+j)=(m_pWordData[i*m_pBIH->biWidth+j]>>(m_BitCount-8));

}

}

elseif(m_BitCount==16)

{

for(i=0;ibiWidth*m_pBIH->biHeight;i++)

{

m_pDibBits[i]=(m_pWordData[i]>>8);

}

}

*/

if(nWidth==-1)

nWidth=m_pBIH->biWidth;

if(nHeight==-1)

nHeight=m_pBIH->biHeight;

if(Style)

{

StretchDIBits(pDC->m_hDC,nX,nY,

nWidth,nHeight,

0,0,

m_pBIH->biWidth,m_pBIH->biHeight,

m_pDibBits,

(BITMAPINFO*)m_pBIH,

BI_RGB,SRCCOPY);

}

else

{

SetDIBitsToDevice(pDC->m_hDC,nX,nY,

m_pBIH->biWidth,m_pBIH->biHeight,

0,0,

0,m_pBIH->biHeight,

m_pDibBits,

(BITMAPINFO*)m_pBIH,

BI_RGB);

}

return(TRUE);

}

BOOLCDib:

:

SetPalette(CDC*pDC)

{

if(m_pDib==NULL)

return(FALSE);

if(m_Palette.GetSafeHandle()==NULL)

return(TRUE);

pOldPalette=pDC->SelectPalette(&m_Palette,FALSE);

pDC->RealizePalette();

pDC->SelectPalette(pOldPalette,FALSE);

return(TRUE);

}

boolCDib:

:

ConvertToTwoValue()

{

DWORDi,size;

unsignedchar*p;

//一个二值化程序

//以128为界划分

p=m_pDibBits;

size=m_dwDibSize-(m_pDibBits-m_pDib);

for(i=0;i

{

if(*p<128)

{

*p=0;

}

else

{

*p=255;

}

p++;

}

returntrue;

}

voidCShowDIBView:

:

OnFileOpen()//打开一张bmp图像

{

staticcharszFilter[]="BMPFiles(*.BMP)|*.BMP|AllFiles(*.*)|*.*||";

CFileDialogFileDlg(TRUE,NULL,NULL,

OFN_HIDEREADONLY,szFilter);

if(FileDlg.DoModal()==IDOK&&

m_Dib.Load(FileDlg.GetPathName())){

InvalidateRect(NULL,TRUE);

UpdateWindow();

}

}

voidCShowDIBView:

:

OnFileSave()//文件保存

{

//TODO:

Addyourcommandhandlercodehere

staticcharszFilter[]="BMPFiles(*.BMP)|*.BMP|AllFiles(*.*)|*.*||";

CFileDialogFileDlg(FALSE,"bmp",NULL,

OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);

if(FileDlg.DoModal()==IDOK&&

m_Dib.Save(FileDlg.GetPathName())){

InvalidateRect(NULL,TRUE);

UpdateWindow();

}

}

voidCShowDIBView:

:

OnPROCESS2value()

{

//TODO:

Addyourcommandhandlercodehere

if(m_Dib.ConvertToTwoValue())

{

InvalidateRect(NULL,TRUE);

UpdateWindow();

}

}

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2