欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:13519825       资源大小:229.74KB        全文页数:25页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、课程设计 基于vc的bmp图像二值化处理平台 课 程 设 计 说 明 书学生姓名: 学 号: 学生姓名: 学 号: 学生姓名: 学 号: 学生姓名: 学 号: 学 院:中北大学信息商务学院 专 业: 电子信息工程 题 目:专用基本技能实践: 基于VC的BMP图像二值化处理平台 指导教师: 陈平 职称: 副教授 2014 年 12 月 26 日 课程设计任务书 14/15 学年第 一 学期学 院:中北大学信息商务学院 专 业: 电子信息工程 学 生 姓 名: 学 号: 学 生 姓 名: 学 号: 学 生 姓 名: 学 号: 学 生 姓 名: 学 号: 课程设计题目:专用基本技能实践: 基于VC的

    2、BMP图像二值化处理平台 起 迄 日 期: 2014年 12 月 29 日2015年1月10日 课程设计地点: C304教室 指 导 教 师: 系 主 任: 下达任务书日期: 2014 年12 月26日课 程 设 计 任 务 书1设计目的:(1) 掌握VC+程序开发平台;(2) 掌握对话框模式的可视化实现和按钮消息的响应;(3)掌握应用VC+库函数实现BMP图像文件的打开、显示和二值化处理等功能。2设计内容和要求(包括原始数据、技术参数、条件、设计要求等):(1)查阅相关资料,掌握基于面向对象的编程方法;(2)主界面采用对话框或菜单模式,通过文件对话框,打开图像文件;(3)通过控件控制关联,实

    3、现BMP图像数据的显示;(4)通过对图像的灰度数据进行有条件的赋值,实现图像的二值化处理并显示。(5)要求3位同学各自实现不同分工。3设计工作任务及工作量的要求包括课程设计计算说明书(论文)、图纸、实物样品等:(1) 要求设计组的每个成员都要了解设计的要求和思路;(2) 编写详细的设计说明书三份;(3) 要求有正确的运行结果及结果分析。课 程 设 计 任 务 书4主要参考文献:1 王华, 叶爱亮, 祁立学等. Visual C+ 6.0 编程实例与技巧. 北京:机械工业出版社, 1999.2 李光明. Visual C+ 6.0 经典实例大制作. 北京:中国人事出版社,2000.3 严华峰.

    4、Visual C+ 课程设计案例精编. 北京:中国水利水电出版社,2002.4 官章全, 刘加明. Visual C+ 6.0 类库大全. 北京:电子工业出版社,1999.5 张荣梅,梁晓林. Visual C+实用教程. 北京:冶金工业出版社,2004.6 魏亮,李春葆. Visual C+程序设计例学与实践. 北京:清华大学出版社,2006.7 陈清华, 朱红. Visual C+课程设计案例精选与编程指导. 南京:东南大学出版社,2004.5设计成果形式及要求:提供详细的设计说明书三份软件设计结果6工作计划及进度:2014年12月29日 12月31日: 学习VC有关编程方法;20151月

    5、1日 1月6日: 在指导教师指导下实现程序设计;1月7日 1月9日: 撰写课程设计说明书; 1月10日:答辩系主任审查意见: 签字: 年 月 日目录一、设计目的-1二、设计主要方案及理论介绍-1三、设计主要步骤-2四、运行结果-6五、设计评述-7六、参考文献-7七、代码-8一、设计目的: 1.掌握VC+程序开发平台; 2.掌握对话框模式的可视化实现和按钮消息的响应; 3.掌握应用VC+库函数实现BMP图像文件的打开、显示和二值化处理等功能。二、设计主要方案及理论介绍 通过vc实现bmp图像二值化处理图像灰度变换模块图像灰度变换模块实现了彩色图像变灰度格式,灰度图像变彩色格式和二值化操作。经过分

    6、析图像灰度变换功能,得出图像处理的功能模块图如图4.4所示: 图 灰度变换模块功能结构图灰度变换类GrayTrans是在基类ImgCenterDib基础上派生出来的, 灰度变换类设计代码如下:class GrayTrans:public ImgCenterDibpublic: int m_nBitCountOut; /输出图像每像素位数unsigned char * m_pImgDataOut; /输出图像位图数据指针LPRGBQUAD m_lpColorTableOut; /输出图像颜色表private: int m_imgWidthOut; /图像的宽,像素为单位int m_imgHeig

    7、htOut; /图像的高 int m_nColorTableLengthOut; /输出图像颜色表长度public: GrayTrans();/不带参数的构造函数 GrayTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData); /带参数的构造函数GrayTrans(); CSize GetDimensions();/以像素为单位返回输出图像的宽和高 void Binary(int threshold=128); /二值化;利用类向导,给相应的控件定义消息处理函数,如下表表2 主要的消息

    8、处理函数表序号ID号及类名消息处理函数函数功能3ID_BinTwoOnBinTwo二值化在picture_sysView.cpp重载消息处理函数,这三个消息处理函数代码基本相似,共同操作伪代码如下: 三、设计主要步骤 新建建立菜单 找类文件名选择ClassView视图,编辑菜单资源选ResourceView视图。单击File按Ctrl+w打开类向导添加菜单处理函数然后点击Edit Code,直接复制代码就可添加新类CDib类定义在Dib.h中复制代码添加类CDib类中处理函数定义复制代码程序运行,点击File,选择*.bmp文件,点击打开,在选择Process2Value。四、运行结果原图 二

    9、值化处理后的图5、设计评述 这次课程设计是以Microsoft Visual C+ 6.0 文档视图编程为基础实现的,这就要求对MFC文档视图操作有一定的了解和操作编程能力,在做课程设计前,我查阅了该方面相关的书籍,对我完成欢迎界面和主界面的设计有很大的帮助。编程中在不同类之间函数参数和变量的传递和函数的调用出了问题,但是理清函数的编译编译顺序和变量的类型这些问题都逐一解决,同时增强了对工具栏,菜单栏的手动操作能力。 另外一点是对.bmp图像处理的实现,数字图像处理关键是算法的设计思想和算法的实现,通过这次课程设计,使我了解到了算法设计的重要性(算法设计是编程实现的前提),提高了自己动手编程的

    10、能力和汲取一些先进算法的思想,这对以后图像处理的深入学习大有帮助。 该数字图像界面是基于Microsoft Visual C+ 6.0的MFC多文档实现的,在界面设计上看起来过于单调,界面设计简单,但易于操作; Visual C+ 6.0的MFC对话框的编程是界面看起来更加美观,更接近软件系统,给人不一样的感觉,提高了工具栏和菜单栏的编程实现难度和设计的复杂度,这是今后学习的方向。六、参考文献:1 郑莉 董渊 张瑞丰, C+语言程序设计(第三版), 清华大学出版社 20032David J.Kruglinski(美)等, Visual C+ 6.0技术内幕,北京希望电子出版社,20023谢凤英

    11、 赵丹培, Visual C+ 数字图像处理,电子工业出版社,20084求是科技 张宏林,精通Visual C+ 数字图像处理典型算法及实现,人民邮电出版社,20085刘锐宁 宋坤等, Visual C+从入门到精通,清华大学出版社,20087、代码/ DIB.h /添加新类CDib类定义#ifndef _DIB_H_#define _DIB_H_#include ShowDIB.hclass CDibpublic: CDib(); CDib(); BOOL Draw( CDC *pDC, int nX = -1, int nY = -1, int nWidth = -1, int nHeig

    12、ht = -1, int Style = 1); BOOL Save( const char *pszFilename ); BOOL Load( const char * ); BOOL SetPalette( CDC * );/ bool Valid;public: int m_BitCount; WORD * m_pWordData; CPalette m_Palette; unsigned char *m_pDib, *m_pDibBits; DWORD m_dwDibSize; BITMAPINFOHEADER *m_pBIH; RGBQUAD *m_pPalette; int m_

    13、nPaletteEntries;public: bool ConvertToTwoValue();#endif/ DIB.cpp/添加类CDib类中处理函数定义#include stdafx.h#include DIB.hCDib:CDib() m_pDib = NULL; m_pWordData = NULL;CDib:CDib() if( m_pDib != NULL ) delete m_pDib; if( m_pWordData != NULL ) delete m_pWordData;BOOL CDib:Load( const char *pszFilename ) CFile cf

    14、; if( !cf.Open( pszFilename, CFile:modeRead ) ) return( FALSE ); DWORD dwDibSize; dwDibSize = cf.GetLength() - sizeof( BITMAPFILEHEADER ); pDib = new unsigned char dwDibSize; if( pDib = NULL ) return( FALSE ); BITMAPFILEHEADER BFH; try if( cf.Read( &BFH, sizeof( BITMAPFILEHEADER ) ) != sizeof( BITMA

    15、PFILEHEADER ) | 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 ) delete m_pDib; m_pDib = pDib; m_dwDibSize = dwDibSize; m_pBIH = (BITMAPINFOHEADER *) m_pDib

    16、; m_pPalette = (RGBQUAD *) &m_pDibsizeof(BITMAPINFOHEADER); m_nPaletteEntries = 1 biBitCount; if( m_pBIH-biBitCount 8 ) m_nPaletteEntries = 0; else if( m_pBIH-biClrUsed != 0 ) m_nPaletteEntries = m_pBIH-biClrUsed; m_pDibBits = &m_pDibsizeof(BITMAPINFOHEADER)+ m_nPaletteEntries*sizeof(RGBQUAD); if( m

    17、_Palette.GetSafeHandle() != NULL ) m_Palette.DeleteObject(); if( m_nPaletteEntries != 0 ) LOGPALETTE *pLogPal = (LOGPALETTE *) new char sizeof(LOGPALETTE)+ m_nPaletteEntries*sizeof(PALETTEENTRY); if( pLogPal != NULL ) pLogPal-palVersion = 0x300; pLogPal-palNumEntries = m_nPaletteEntries; for( int i=

    18、0; ipalPalEntryi.peRed = m_pPalettei.rgbRed; pLogPal-palPalEntryi.peGreen = m_pPalettei.rgbGreen; pLogPal-palPalEntryi.peBlue = m_pPalettei.rgbBlue; m_Palette.CreatePalette( pLogPal ); delete pLogPal; m_BitCount = 8; return( TRUE );BOOL CDib:Save( const char *pszFilename ) if( m_pDib = NULL ) return

    19、( FALSE ); CFile cf; if( !cf.Open( pszFilename, CFile:modeCreate | CFile:modeWrite ) ) return( FALSE ); try BITMAPFILEHEADER BFH; memset( &BFH, 0, sizeof( BITMAPFILEHEADER ) ); BFH.bfType = MB; BFH.bfSize = sizeof( BITMAPFILEHEADER ) + m_dwDibSize; BFH.bfOffBits = sizeof( BITMAPFILEHEADER ) + sizeof

    20、( 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 );BOOL CDib:Draw( CDC *pDC, int nX, int nY, int nWidth, int nHeight, int Style ) long i,j;

    21、 if( m_pDib = NULL ) return( FALSE ); long vWidth = (4 - m_pBIH-biWidth % 4) % 4 + m_pBIH-biWidth; /*if ( m_BitCount != 8) for (i = 0; ibiHeight; i+) for (j = 0; j biWidth; j+) *(m_pDibBits+i*vWidth+j) = (m_pWordDatai*m_pBIH-biWidth+j (m_BitCount-8); else if ( m_BitCount = 16) for (i = 0; ibiWidth*m

    22、_pBIH-biHeight; i+) m_pDibBitsi = (m_pWordDatai 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 ); e

    23、lse 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 );BOOL CDib:SetPalette( CDC *pDC ) if( m_pDib = NULL ) return( FALSE ); if( m_Palette.GetSafeHandle() = NULL ) return( TRUE ); pOldPalette = p

    24、DC-SelectPalette( &m_Palette, FALSE ); pDC-RealizePalette(); pDC-SelectPalette( pOldPalette, FALSE ); return( TRUE );bool CDib:ConvertToTwoValue() DWORD i,size; unsigned char *p; / 一个二值化程序 / 以128为界划分 p = m_pDibBits; size = m_dwDibSize - (m_pDibBits - m_pDib); for (i = 0; i size;i+) if (*p 128) *p =

    25、0; else *p = 255; p+; return true;void CShowDIBView:OnFileOpen() /打开一张bmp图像 static char szFilter = BMP Files(*.BMP)|*.BMP|All Files(*.*)|*.*|; CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter ); if( FileDlg.DoModal() = IDOK & m_Dib.Load( FileDlg.GetPathName() ) ) InvalidateRect( NUL

    26、L, TRUE ); UpdateWindow(); void CShowDIBView:OnFileSave() /文件保存 / TODO: Add your command handler code here static char szFilter = BMP Files(*.BMP)|*.BMP|All Files(*.*)|*.*|; CFileDialog FileDlg( FALSE, bmp, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter ); if( FileDlg.DoModal() = IDOK & m_Dib.

    27、Save( FileDlg.GetPathName() ) ) InvalidateRect( NULL, TRUE ); UpdateWindow(); void CShowDIBView:OnPROCESS2value() / TODO: Add your command handler code here if (m_Dib.ConvertToTwoValue() InvalidateRect( NULL, TRUE ); UpdateWindow(); 目录第一章项目基本情况 3一、项目情况说明 3二、可行性研究的依据 5第二章项目建设的必要性与可行性 8一、项目建设背景 8二、项目建设的必要性 9三、项目建设的可行性 14第三章市场供求分析及预测 17一、项目区生猪养殖和养殖粪污的利用现状 17二、禽畜粪污产量、沼气及沼肥产量调查与分析 1


    注意事项

    本文(课程设计 基于vc的bmp图像二值化处理平台.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开