网站首页 语言 会计 电脑 医学 资格证 职场 文艺体育 范文
当前位置:书香门第 > 范文 > 实习

彩色转灰度实习报告

栏目: 实习 / 发布于: / 人气:3.36W

《面向对象程序设计》实习报告 彩色转灰度

彩色转灰度实习报告

一、功能模块分析

这个程序主要是实现实现 BMP图片的读取、显示、保存与图像处理包括灰度化。

1.图片的存取

1.1 BMP图片的读取

在MyDIPDoc.cpp文件的OnOpenDocumen()函数实现BMP文件的读取。读取功能的实现函数中需要传入BMP图片的名字路径,然后该函数沿着此路径去寻找相应的BMP图片,读取图像数据进内存生成DIB,并存放在m_lpDib所指向的缓冲区,若返回值为1,则会读取打开此图片;否则,则会报Read error的错误。

1.2 BMP图片的显示

修改MyDIPView中的OnDraw()函数和OnInitialUpdate()函数,实现图片的显示。在显示函数实现其功能时,需要传入给定设备环境指针,以及需要显示的矩形区域在设备环境中的位置,然后将m_lpDib所指向的DIB显示出来并可根据需要设置显示窗口大小。

1.3 BMP图片的保存

在MyDIPDoc.cpp文件的OnSaveDocument()函数实现BMP文件的保存。保存图片时则需给定一个图像文件名及其路径,将m_lpDib指向DIB存盘,当找到此路径后,应用程序自然将其保存在当前路径下。

2.图片的操作

2.1 BMP图片的负像

void MyDIPView::OnReverse()函数将m_pImgData作为输入图像,将其求负像操作,结果存入m_pImgDataOut中。黑白图像的输出结果与原来相反,即原来的白色输出为黑色,原来的黑色输出为白色。对于彩色图像,要分通道单独处理,最终得出的仍然是彩色图像,其色彩与原来的成互补关系。

2.2 BMP图片的灰度化

void MyDIPView::OnGray()函数将m_pImgData作为输入图像,将其求灰值操作,结果存入m_pImgDataOut中。应用程序丢掉图像的彩色成分,用灰度来表示图像的亮度信息,最终输出黑白图像。其只处理彩色图像。

二、实验环境与步骤

一. 创建工程与前期准备

1. 新建程序

运行Microsoft VisualC++ 6.0在其中打开新建创建工程,采用MFC App Wizard应用程序向导建立的MDI(多文档)框架的工程mtg。

2. 添加新类

向新建的工程中添加新的类CImageCenterDib和CGrayTrans,首先是将,ImageCenterDib.h;,GrayTrans.h这四个文件复制到所创建的'程序中,在file view中的Source Files中添加两个的资源文件,在Head Files中添加两个.h的头文件。并在CMtgView 类中的和MyDIP类的文件包含新加入的两个类的头文件#include "ImageCenterDib.h"和#include "GrayTrans.h"。其中类CImageCenterDib主要实现图像的打开,显示和保存。CGrayTrans主要实现对图像的编辑。

二. 图像的基本操作,打开,显示和保存。

1. 在文档类中定义一个私有属性的ImageCenterDib类对象 m_dib,用来为打开BMP文件创建一个ImageCenterDib类对象。

Private :

ImgCenterDib m_dib;

并实现一个公有函数GetPDib(),用来返回m_dib的指针,为视图类访问文档类m_dib数据提供之处。

ImgCenterDib *GetPDib()

{return &m_dib;}

2.图像的读取

首先通过类向导向MyDIP中添加函数OnOpenDocumen()。然后在MyDIPDoc.cpp文件的OnOpenDocumen()函数中添加如下代码,实现BMP文件的读取

3.BMP图片的保存

首先通过类向导向MyDIP中添加函数OnSaveDocumen()。然后在MyDIPDoc.cpp文件中的OnSaveDocument()函数中添加如下代码,实现BMP文件的保存

4.BMP图片的显示

用类向导向MyDIPView中添加OnDraw()函数和OnInitialUpdate()函数,然后再编辑其中代码实现图片的显示和子窗口中滚动条的添加。

三、实验结果及分析

一.实验结果截图

1. 图片的打开

2. 图片的显示

3. 图片的保存

4. 图片的灰度化

四.总结体会

经过这几天的上级实习,自己的动手能力得到了很大的提高,一些快遗忘的知识又再次得到了巩固,可以说真来了一个总复习。由于代码一直写的比较乱,在程序出现错误很难找到原因,特别是在代码比较长的的时候,于是明白了代码的书写规范很重要,它不仅是给机器阅读的,只有写的规范才能更好的让人理解。虽然编程过程遇到一些困难难以解决,但只要仔细思考,最终还是做出来了,当然成功的那一刻的喜悦也是无以言表的。上机最大的收获还是懂得如何去分析需求,根据需求来设计程序的框架,以免出现思维混乱的的情况。当然程序思维也得到了很大的提高,对于代码的阅读及修正能力也有了一些进步。通过此次上机我还认识到,只有通过自己实践得到的知识才是自己的,同时通过上机才能对知识的理解的更透彻。当然可能有些进步我自己也没有也没有发觉,就像老师说的这门课程最重要的就是实践,因此可以这么说上机有百利而无一害。