多媒体课程设计报告——简易图像处理软件设计.doc_第1页
多媒体课程设计报告——简易图像处理软件设计.doc_第2页
多媒体课程设计报告——简易图像处理软件设计.doc_第3页
多媒体课程设计报告——简易图像处理软件设计.doc_第4页
多媒体课程设计报告——简易图像处理软件设计.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

简易图像处理软件课程设计自动化学院姓 名: 学 号: 班 级: 指导老师: 项文波 设计题目简易图像处理软件一、 摘要一般涉及到图像处理的编程设计均会用到opencv图像处理库,它轻量级而且高效,由一系列 C 函数和少量 C+ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。本次课程设计做的是实现图像的放大,缩小和任意角度的旋转,而opencv库中不仅有直接实现图像的读入和保存的函数,还有间接实现旋转和缩放的函数,非常适合本次课程设计的要求。在本次的课程设计中,通过调用opencv库中类的成员函数来实现如缩放和旋转等基本图像变换,甚至还可以对图像进行滤波变换。为了程序界面的美观,我还利用skin+库给软件界面增加了皮肤。二、 设计目的本实验是设计一个具有缩放和任意角度旋转功能的图像处理软件,通过这一课程设计,可以训练我们综合运用所学知识的能力,也能对opencv库有一些深入的了解,为以后数字图像处理这后续课程打下坚实的基础。更能在我们互相学习互相帮助的过程中提高我们的工作和协作能力。三、 项目背景本课程设计是基于opencv图像处理库和MFC单文档编程的,通过调用其中的一些如cvLoadImage,cvSaveImage,cvCreateImage,cvTranspose等的基本函数来实现设计目的。四、 总体方案设计要实现如上的设计目的必须解决以下几个问题:1. 图像的显示2. 图像的保存3. 图像的缩放4. 图像的旋转本实验报告分四个部分依次介绍我的设计模块。五、 各程序模块说明1. 图像的显示毫无疑问,图像的显示必然是在OnDraw(CDC* pDC)函数中实现的。实现思路是,首先获得要显示图像的句柄,然后在屏幕DC中显示图像。用到的相关函数是CopyOf和Show。CvvImage:CopyOfvoid CvvImage:CopyOf(CvvImage& img, int desired_color);void CvvImage:CopyOf(IplImage* img, int desired_color);作用:从img复制图像到当前的对象中。 img 为要复制的图像。 desired_color 为复制后图像的通道数, 复制后图像的像素深度为8bit。 CvvImage:Showvoid CvvImage:Show(HDC dc, int x, int y, int w, int h, int from_x, int from_y);作用:绘制图像的部分到DC。图像没有缩放。此函数仅在Windows下有效。 dc 为设备描述符。 x 为局部图像显示在DC上,从DC上的第x列开始。 y 为局部图像显示在DC上,从DC上的第y列开始。 (x,y)为局部图像显示在DC上的起始位置。 w 为局部图像宽度。 h为 局部图像高度。 from_x 指从图像的第from_x列开始显示。 from_y 指从图像的第from_y行开始显示。 在图像显示的时候还遇到一个问题,就是图像显示的时候显示在界面的左上角,这不符合认得视觉特点,所以还需要将图像显示在界面中间。代码实现:void CMicroACDSeeView:OnDraw(CDC* pDC) CMicroACDSeeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(pDoc-m_pImage != NULL) CvvImage img; img.CopyOf(pDoc-m_pImage);/取得图像 int x = 0, y = 0; CRect rect; GetClientRect(&rect); if(img.Width() rect.Width()/将图像摆放在视图中央 x = rect.Width() - img.Width(); x = x / 2; if(img.Height() m_hDC, x, y, pDoc-m_pImage-width, pDoc-m_pImage-height, m_iImgX, m_iImgY);2. 图像的保存其实图像的保存主要是用到了CFileDialog类,CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。格式:CFileDialog:CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL )参数意义如下: bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。 lpszDefExt 指定默认的文件扩展名。 lpszFileName 指定默认的文件名。 dwFlags 指明一些特定风格。 lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。代码实现:void CMicroACDSeeView:OnFileSaveAs() CFileDialog save(FALSE, NULL, GetDocument()- m_sCurrFile); if( save.DoModal() = IDOK) CString path; path = save.GetPathName(); GetDocument()-SaveImage(path); m_bIsChange = false; 3. 图像的缩放要实现图像的缩放首先要获得缩放比例,然后利用cvCreateImage函数创建头并按照要求分配数据,最后用cvResize函数缩放源图像到目标图像。函数说明:IplImage* cvCreateImage( CvSize size, int depth, int channels );参数说明:size:图像宽、高;depth:图像元素的位深度;channels:每个元素(像素)通道号.可以是 1, 2, 3 或 4。cvResize(src,dst,CV_INTER_LINEAR);参数说明:src是原图片的指针,dst是目标图片的指针,CV_INTER_LINEAR是缩放使用的插值方法。代码实现:bool ZoomEx(double ratio, IplImage* imgSrc, IplImage* imgDst) if(ratio width * ratio); size.height = int(*imgDst)-height * ratio); cvReleaseImage(imgDst); (*imgDst) = cvCreateImage(size, imgSrc-depth, imgSrc-nChannels); cvResize(imgSrc, (*imgDst); return true;4. 图像的旋转当图像旋转90的时候,在边框方面只需长度和宽度互换,而在显示的图像内容方面也需要相应的旋转90。这就需要用到转置函数cvTranspose,它的格式是void cvTranspose( const CvArr* src, CvArr* dst ); src为输入矩阵;dst 为目标矩阵;函数 cvTranspose 的功能是对矩阵 src 求转置: dst(i,j)=src(j,i)。而当需要旋转任意角度的时候,需要建立一个对话框输入要旋转的度数。代码实现:bool RotateEx(IplImage* imgSrc, int angle)IplImage *dst = 0;if(angle = 90 | angle = -90)CvSize size;size.width = (*imgSrc)-height;size.height = (*imgSrc)-width;dst = cvCreateImage(size, (*imgSrc)-depth, (*imgSrc)-nChannels); cvTranspose(*imgSrc), dst);cvReleaseImage(&(*imgSrc);(*imgSrc) = dst;int f = (angle = 90)? 1 : 0;cvFlip(*imgSrc), (*imgSrc), f);else dst = cvCloneImage (*imgSrc);float m6;CvMat M = cvMat (2, 3, CV_32F, m);int w =(*imgSrc) -width;int h = (*imgSrc) -height;m0 = (float) ( cos (-angle * CV_PI / 180.);m1 = (float) ( sin (-angle * CV_PI / 180.);m3 = -m1;m4 = m0;/ 将旋转中心移至图像中间m2 = w * 0.5f;m5 = h * 0.5f;cvZero (dst);cvGetQuadrangleSubPix (*imgSrc), dst, &M);cvReleaseImage(&(*imgSrc);(*imgSrc) = dst;return true;六、 改进意见其实opencv库德功能远不仅如此,它还可以对图像做锐化,平滑,滤波,DCT变换等等,我还可以在界面中添加类似的图像处理按钮,便可以添加这种功能。七、 结论和体会本次课程设计用的是VC6.0编程环境,是建立在之前的MFC课程设计的基础之上的,感觉自己对MFC编程已经入门了,但是离精通的距离还是非常遥远的。一开始编这个MFC程序的时候真的很不适应,以前编C+程序的时候都是写几功能函数或是定义几个行了,而MFC中有太多自带的库和类还有功能函数,加上还要添加opencv库并利用里面的函数,有时候都不知道其中有哪些函数是实现什么样的功能,这就需要我去网上查找相应的介

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论