在窗口中绘制相关位图,图标,设备无关位图
- 格式:doc
- 大小:33.50 KB
- 文档页数:3
二、课程章节主要内容及学时分配第一章、数字图像处理方法概述讲课3课时了解本课程研究的对象、内容及其在培养软件编程高级人才中的地位、作用和任务;了解数字图像处理的应用;了解数字图像的基本概念、与设备相关的位图(DDB)、与设备无关的位图(DIB);了解调色板的基本概念和应用;了解CDIB类与程序框架结构介绍;了解位图图像处理技术。
重点:CDIB类与程序框架结构介绍。
难点:调色板的基本概念和应用。
第二章、图像的特效显示讲课3课时、实验2学时了解扫描、移动、百叶窗、栅条、马赛克、渐显与渐隐、浮雕化特效显示。
重点:渐显与渐隐。
难点:马赛克。
第三章、图像的几何变换讲课2课时了解图像的缩放、平移、镜像变换、转置、旋转。
重点:镜像变换。
难点:旋转。
第四章、图像灰度变换讲课3课时、实验2学时了解非0元素取1法、固定阈值法、双固定阈值法的图像灰度变换;了解灰度的线性变换、窗口灰度变换处理、灰度拉伸、灰度直方图、灰度分布均衡化。
重点:灰度直方图。
难点:灰度分布均衡化。
第五章、图像的平滑处理讲课3课时了解二值图像的黑白点噪声滤波、消除孤立黑像素点、3*3均值滤波、N*N 均值滤波器、有选择的局部平均化、N*N中值滤波器、十字型中值滤波器、N*N最大值滤波器、产生噪声。
重点:消除孤立黑像素点、中值滤波器。
难点:有选择的局部平均化。
第六章、图像锐化处理及边缘检测讲课3课时、实验2学时了解梯度锐化、纵向微分运算、横向微分运算、双方向一次微分运算、二次微分运算、Roberts边缘检测算子、Sobel边缘检测算子、Krisch边缘检测、高斯-拉普拉斯算子。
重点:Roberts边缘检测算子、高斯-拉普拉斯算子。
难点:梯度锐化。
第七章、图像分割及测量讲课4课时了解图像域值分割、轮廓提取、轮廓跟踪、图像的测量。
重点:轮廓提取、轮廓跟踪。
难点:图像的测量。
包括:图像的区域标记、图像的面积测量及图像的周长测量。
第八章、图像的形态学处理讲课3课时了解图像腐蚀、图像的膨胀、图像开启与闭合、图像的细化、图像的粗化、中轴变化。
数字图像处理第一次作业姓名:班级:学号:提交日期:2015年3月13日摘要本次报告首先简单阐述了BMP图像格式及其相关数据结构,随后主要完成了作业要求中关于图像处理与计算的各项任务。
本次作业以Matlab 2014为平台,通过对lena.bmp,elain.bmp图像文件的编程处理,分别得到了lena.bmp图像的8到1级灰度逐级递减显示,lena.bmp图像的均值和方差,通过近邻、双线性和双三次插值法对lena.bmp进行4倍放大后得到的2048×2048尺寸图像,和对lena.bmp、elain.bmp图像分别进行水平偏移变换和旋转变换后的图像及其4倍插值放大图像。
以上任务完成后均得到了预期的结果。
1.Bmp图像格式简介。
1.1 BMP格式概述BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。
BMP文件的图像深度可选lbit、4bit、8bit及24bit。
BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
1.2 BMP格式组成典型的BMP图像文件由四部分组成:(1)位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;(2)位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;(3)调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;(4)位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。
1.3 BMP格式对应数据结构BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。
1.3.1 BMP文件头(14字节)BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。
图形设备接口一、GDI、DC的概念1.GDI:(Graphics Device Interfase)图形设备接口,是一个应用程序与输出设备之间的中介。
一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道。
user32.dll2.DC:(Device Context)设备描述表,是一种Windows数据结构。
包括了与一个设备的绘制属性相关的信息。
所有的绘制操作通过一个设备描述表进行,绘制线条、形状和文本的Windows API 函数都与DC有关。
二、在Windows Application程序中画线1.定义两个全局变量用于记录鼠标按下的(x,y)坐标。
int nOrginX;int nOrginY;2.响应鼠标按下和鼠标抬起的消息:在Swich中加入case WM_LBUTTONDOWN:case WM_LBUTTONUP:3.在鼠标按下时记录鼠标按下的(x,y)坐标,查MSDN得知WM_LBUTTONDOWN lParam的低字存放x坐标,高字存放y坐标,将其取出存入nOrginX,nOrginY。
case WM_LBUTTONDOWN:nOrginX=lParam & 0x0000ffff;nOrginY=lParam >> 16 & 0x0000ffff;break;4.在鼠标抬起时画线:case WM_LBUTTONUP:HDC hdc;hdc=GetDC(hwnd);PAINTSTRUCT ps;::MoveToEx(hdc,nOrginX,nOrginY,NULL);::LineTo(hdc,LOWORD(lParam),HIWORD(lParam) );::ReleaseDC(hwnd,hdc);三、在MFC程序中画线:1.在CxxxView(其中xxx是你的工程名字)中响应鼠标按下和鼠标抬起的消息(因为只有CxxxView中才能接收到鼠标消息):使用ClassWizard加入WM_LBUTTONDOWN,WM_LBUTTONUP的消息响应函数OnLButtonDown, OnLButtonUp。
用Visual C++显示位图的原理与方法(同名26600)一、介绍在VC++环境下显示位图并不是什么新技术,但本文仍然在此“老调重弹”的原因是:(1)这一技术十分重要,它是图像编程的基础,掌握不了这些基本原理也就很难独立开发出符合实际需要的应用程序;(2)许多关于VC++编程的资料都提供了显示位图(Bitmap)的实例,但遗憾的是,由于侧重点的不同使得有关调色板、设备上下文(DC)以及图形设备接口(GDI)等与位图密切相关的知识要么是很少提到,要么就是很不全面、一代而过,或者部分内容被放到了别处,显得支离破碎。
这使得许多读者在模仿这些例子“克隆”出自己的应用程序后,仍感到有许多不解之处存在;(3)为了显示位图,Windows 及MFC提供了一些类和函数供我们利用,熟悉它们的作用对我们编程很有帮助。
二、基本概念与原理调色板:调色板的概念必须首先介绍,它在除24位真彩色显示系统的其它系统中都要用到。
尽管多媒体技术的发展令计算机所能显示的色彩越来越绚丽缤纷,但实际上,自然界无限种类的颜色目前仍无法在计算机上完全表达出来。
现在最高级的所谓24位“真彩色”的显示系统也只能显示既16,777,216种颜色,当然,这已经完全够用了,因为人眼还没有能力区分真彩色系统表现出的颜色与大自然中实际颜色的区别。
在这种系统中,每一个像素的值都用红(R)、绿(G)、蓝(B)三色,每色8位共24位来表示,“24位”显示系统的名字也由此而来,所以,其像素值就是要显示的颜色值,显然,此时只需要直接显示就行了,而不需要调色板。
但对于目前许多4位(16色)或8位(256色)显示系统来说,其像素值与颜色值并不一一对应,此时,调色板技术被派上了用场。
调色板的定义如下:它是在16色或256色显示系统中,由图像中出现最频繁的16或256种颜色组成的颜色表。
它依靠有限种颜色通过组合来实现其它颜色。
若某幅图像是使用调色板的话,那它的像素值就表示颜色在调色板查找表中的索引号,而不是颜色值。
(1) 项目工作区一般在集成开发环境的左侧。
它展示一个工程的几个方面,它们分别是类视图、资源视图和文件视图。
(2) 编译程序的快捷键是Ctrl + F7,链接的快捷键是F7 ,运行程序的快捷键是Ctrl + F5。
(3) 项目工作区文件的扩展名为.dsw。
(4) 应用程序向导AppWizard的作用是帮助用户一步步生成一个新的应用程序,并且自动生成应用程序所需的基本代码,通过ClassWizard可以增加消息映射和成员变量。
(5) 菜单选择可以通过两种方法来进行:一种是;另一种是。
(6) 编译微型条工具栏最右边按钮的功能是设置断点。
2. 选择题(1) 工程文件的扩展名是 b 。
A. .exe B. .dsp C. .dsw D. .cpp(2) 设置断点的默认方式是 d 。
A. LocationB. DataC. MessageD. Breakpoints(3) 用应用程序向导AppWizard创建的C++源文件,应选择 a 选项卡。
A. FilesB. ProjectsC. WorkspacesD. Other Documents(4) Standard工具栏中最左边按钮与 c 菜单命令的功能一样。
A. NewB. New FileC. New Text FileD. New Workspace3. 判断题(1) 用快捷键F9既可设置断点,又可取消断点。
( T )(2) 用户可以通过Tools | Customize菜单命令设置集成开发环境的工具栏。
( T )(3) 通过应用程序向导AppWizard建立的程序不能被立即执行。
( T )(4) 调式程序时,会同时出现Variable窗口和Watch窗口。
( T )4. 简答题(1) 什么是工程? 它是由什么组成的?在Visual C++集成开发环境中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个工程。
医学图像处理实验报告班级专业生物医学工程姓名学号实验一用Vc++实现DDB和DIB位图的显示一、实验目的(1)了解VC++在医学图像处理中的应用。
(2)熟悉用VC++进行DDB和DIB位图显示的编程方法。
二、实验设备微机。
三、实验内容(1)应用VC++进行DDB和DIB位图显示。
四、实验步骤1、开启VC++6.0,在菜单中选中File单击鼠标左键,在下拉菜单中选中New 单击鼠标左键,在打开的对话框中,根据MFC Appward向导创建可执行的应用程序ShowBmp。
2、在程序中插入位图资源,并添加代码实现位图的显示。
3、在程序中插入Dib类,并添加相应的代码。
4、编程完毕,调试和运行程序,运行无误后,显示DDB和DIB位图并拷贝所得图像。
5、整理所得图像,对实验结果进行分析。
五、实验结果和分析(a)ShowDIB 位图 (b )ShowDDB 位图 六、思考题1、DDB 和DIB 位图的显示有什么不同?设备相关位图DDB 依赖于具体设备,加入了程序资源,一般以资源文件的形式存储;设备无关位图DIB 不依赖于具体设备,没有任何程序资源,可以永久性的存放在电脑硬盘里,可任意打开硬盘上一幅位图。
医学图像处理实验报告班级 专业 生物医学工程 姓名 学号实验二 用Vc++实现医学图像的线性灰度变换一、实验目的(1)了解VC++在医学图像处理中的应用。
(2)熟悉用VC++进行医学图像线性灰度变换的编程方法。
二、实验设备 微机。
三、实验内容(1)应用VC++进行医学图像的线性灰度变换。
四、实验步骤1、开启VC++6.0,在菜单中选中File 单击鼠标左键,在下拉菜单中选中Open Workspce 单击鼠标左键,在打开的对话框中,根据路径:D:\WorkSpace\MedicalImageProcessingDLL\ MedicalImageProcessingDLL.dsw 打开工作空间。
2、在打开的VC 工作空间中首先找到类XH_MedicalImageProcessing,然后,在类中找到函数ImgLineTransferGray 。
2.4 在窗口中绘制设备相关位图,图标,设备无关位图
在Windows中可以将预先准备好的图像复制到显示区域中,这种内存拷贝执行起来是非常快的。
在Windows中提供了两种使用图形拷贝的方法:通过设备相关位图(DDB)和设备无关位图(DIB)。
DDB可以用MFC中的CBitmap来表示,而DDB一般是存储在资源文件中,在加载时只需要通过资源ID号就可以将图形装入。
BOOL CBitmap::LoadBitmap( UINT nIDResource )可以装入指定DDB,但是在绘制时必须借助另一个和当前绘图DC兼容的内存DC来进行。
通过CDC::BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop )绘制图形,同时指定光栅操作的类型。
BitBlt可以将源DC中位图复制到目的DC中,其中前四个参数为目的区域的坐标,接下来是源DC指针,然后是源DC 中的起始坐标,由于BitBlt为等比例复制,所以不需要再次指定长宽,(StretchBlt可以进行缩放)最后一个参数为光栅操作的类型,可取以下值:
∙BLACKNESS输出区域为黑色 Turns all output black.
∙DSTINVERT反色输出区域 Inverts the destination bitmap.
∙MERGECOPY在源和目的间使用AND操作 Combines the pattern and the source bitmap using the Boolean AND operator.
∙MERGEPAINT在反色后的目的和源间使用OR操作 Combines the inverted source bitmap with the destination bitmap using the Boolean OR operator.
∙NOTSRCCOPY将反色后的源拷贝到目的区 Copies the inverted source bitmap to the destination.
∙PATINVERT源和目的间进行XOR操作 Combines the destination bitmap with the pattern using the Boolean XOR operator.
∙SRCAND源和目的间进行AND操作 Combines pixels of the destination and source bitmaps using the Boolean AND operator.
∙SRCCOPY复制源到目的区 Copies the source bitmap to the destination bitmap.
∙SRCINVERT源和目的间进行XOR操作 Combines pixels of the destination and source bitmaps using the Boolean XOR operator.
∙SRCPAINT源和目的间进行OR操作 Combines pixels of the destination and source bitmaps using the Boolean OR operator.
WHITENESS输出区域为白色 Turns all output white.
下面用代码演示这种方法:
CYourView::OnDraw(CDC* pDC)
{
CDC memDC;//定义一个兼容DC
memDC.CreateCompatibleDC(pDC);//创建DC
CBitmap bmpDraw;
bmpDraw.LoadBitmap(ID_BMP) ;//装入DDB
CBitmap* pbmpOld=memDC.SelectObject(&bmpDraw) ;
//保存原有DDB,并选入新DDB入DC
pDC->BitBlt(0,0,20,20,&memDC,0,0,SRCCOPY) ;
//将源DC中(0,0,20,20)复制到目的DC(0,0,20,20)
pDC->BitBlt(20,20,40,40,&memDC,0,0,SRCAND);
//将源DC中(0,0,20,20)和目的DC(20,20,40,40)中区域进行AND操作memDC.SelectObject(pbmpOld) ;//选入原DDB
}
(图标并不是一个GDI对象,所以不需要选入DC)在MFC中没有一个专门的图标类,因为图标的操作比较简单,使用HICON CWinApp::LoadIcon( UINT nIDResource )或是HICON CWinApp::LoadStandardIcon( LPCTSTR lpszIconName ) 装入后就可以利用BOOL CDC::DrawIcon( int x, int y, HICON hIcon )绘制。
由于在图标中可以指定透明区域,所以在某些需要使用非规则图形而且面积不大的时候使用图标会比较简单。
下面给出简单的代码:
OnDraw(CDC* pDC)
{
HICON hIcon1=AfxGetApp()->LoadIcon(IDI_I1);
HICON hIcon2=AfxGetApp()->LoadIcon(IDI_I2);
pDC->DrawIcon(0,0,hIcon1);
pDC->DrawIcon(0,40,hIcon2);
DestroyIcon(hIcon1);
DestroyIcon(hIcon2);
}
同样在MFC也没有提供一个DIB的类,所以在使用DIB位图时我们需要自己读取位图文件中的头信息,并读入数据,并利用API函数StretchDIBits绘制。
位图文件以BITMAPFILEHEADER结构开始,然后是BITMAPINFOHEADER结构和调色版信息和数据,其实位图格式是图形格式中最简单的一种,而且也是Windows可以理解的一种。
我不详细讲解DIB位图的结构,提供一个CDib类供大家使用,这个类包含了基本的功能如:
Load,Save,Draw。
DownLoad CDib 4K
《Visual C++开发指南》闻怡洋/文﹣相关报道。