好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

媒体信息处理.doc

11页
  • 卖家[上传人]:re****.1
  • 文档编号:545764097
  • 上传时间:2023-10-08
  • 文档格式:DOC
  • 文档大小:1.30MB
  • / 11 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 西安理工大学研究生课程论文/研究报告课程名称: 媒体信息处理技术 课程代号: 040109 任课教师: 胡涛(教授) 论文/研究报告题目: 前景为雨幕图像, 后景为本人图像的叠加完成日期: 2013 年 12 月 30 日学 科: 信号与信息处理 学 号: 1308101145 姓 名: 刘清博 成 绩: 摘 要 数字图象处理的目之一就是为了实现人们现实生活中不太可能完成的一些场景拍摄,从而需要对已有的图片进行特定的处理本文就是基于以上的现实目的,在VC++开发环境中,将自拍的个人图片叠加到一幅目前本人无法真实拍摄到的背景为雨景的图像中,完成图像的叠加功能 文中先运用了Open cv中如何读取图像如何显示图像的方法,确定要进行叠加的图片,再运用前景和背景叠加的思想,将目标对象图像与背景图像按照一定的规则进行叠加,合成一幅图像 关键词:Open CV,背景,图像叠加 1. 课题分析课题的要求是:实现雨景和本人图片的叠加功能,将在特定情况下自拍的个人对象叠加到一幅本人不可能合拍到的雨景图像中。

      课题的实质就是要实现图像的叠加合成确定要进行叠加的图片,再运用前景和背景叠加的思想,将目标对象图像与背景图像按照一定的规则进行叠加,合成一幅图像2. 设计思想简要了解一下本文课题的背景,如何实现图像的叠加起源可以追溯到摄影术与电影术,在叠加过程中,任意形状的前景物体确定后,在合成的过程中,前景物体被放入一幅新的背景图像中其中,如何叠加,怎么实现叠加后的效果是关键,它直接影响最终的合成效果如何让不可能在现实生活中发生的事情像真的一样?上述所有场景中的幻觉都是由一种称为叠加的特效技术创造的这种技术可使演员和比例模型处于完全虚构的环境中——在太空飞船中、悬吊在峡谷上方的索桥上、在空中飞行(像超人那样),并使其在电影中看起来完全像真的背景一样如今,这项技术已经得到了非常广泛的应用,您甚至全然觉察不出它的存在新闻记者看上去好像是在现场播报新闻,而实际上不是电视节目中一些完整的片断可以通过这种方式来剪辑,以便看上去就像是在现场拍摄的,而实际上没有人离开过洛杉矶的制作中心 本文就是实现两张图片的叠加功能将在特定背景下自拍的个人对象叠加到一幅本人不可能合拍到的背景为雨景的图像中3 算法思想两张图片的叠加功能的实现分为两个过程。

      一个是如何打开两张背景图片,一个是如何将本人图像叠加到雨景中4 功能实现 本文使用VC++6.0加OpenCV实现采用MFC的对话框形式主要从人机界面设计和功能模块实现来介绍 4.1人机界面设计界面美观、操作方便是设计的原则,而这些都可以通过界面的设计显示出来,因为界面是人和电脑交互的工具 按钮、文本框的使用等可以方便用户的操作本文设计的界面如下如图4-1所示: 图4-1:展示界面 4.2功能模块实现这部分是本文的核心部分,主要讲述了图片叠加功能具体的实现包括读入图像、图像叠加、保存图像等功能整个算法流程如图4.2所示 打开图片1打开图片2两张图片的叠加图4.2 算法流程4.2.1读入图像本文中需要读入的图像包括前景图像、背景图像、叠加图像方法都同理具体实现是给打开图像按钮添加函数响应响应函数内容如下:第一,定义字符串变量和文件对话框变量第二,获取路径第三,载入图像第四,将图像放入pictrue控件中 主要代码如下: CString FileName; CFileDialog dlg(TRUE); //CFileDialog类封装了Windows常用的文件对话框。

      if(dlg.DoModal()==IDOK) FileName=dlg.GetPathName(); //获取路径 { img=cvLoadImage(FileName); //载入图像 } DrawPicToHDC(img,IDC_ShowImg); //将图像放入picture控件中4.2.2图像叠加图像叠加主要实现将背景中的人物叠加到另一个背景中其实质是将前景图像中的透明度修改,即在整个图像中能看到后边的图像具体实现如下第一,在背景图像中创建指定的区域(这个区域是一个背景中的左上角坐标在(x,y)第二,将两张图片进行叠加并修改前景图中的透明度alpha=0.5,用于将一个图像复制到另一个图像主要代码如下:void CImg_addDlg::OnImageadd() { int i,j; float alpha=0.5; CvSize size; size.height=img_bk->height; size.width=img_bk->width; img_add=cvCreateImage(size,8,3);//创建展开存储图像 int nSaveWidth=( img_add->width*img_add->depth+31)/32*4;// 该函数函数用来得到dib的实际存储宽度(DWORD对齐) cvCopy(img_bk, img_add, NULL); for(i = 0; i < img->height; i++) { for (j = 0; j < img->width*3;j++) { uchar* b1 = &CV_IMAGE_ELEM(img,uchar,i,j); uchar* g1 = &CV_IMAGE_ELEM(img,uchar,i,j+1); uchar* r1 = &CV_IMAGE_ELEM(img,uchar,i,j+2); uchar* b2 = &CV_IMAGE_ELEM(img_bk,uchar,i,j); uchar* g2 = &CV_IMAGE_ELEM(img_bk,uchar,i,j+1); uchar* r2 = &CV_IMAGE_ELEM(img_bk,uchar,i,j+2); img_add->imageData[i*nSaveWidth*3+j] = cvRound(b1[0]*alpha+b2[0]*(1-alpha)); img_add->imageData[i*nSaveWidth*3+j+1] = cvRound(g1[0]*alpha+g2[0]*(1-alpha)); img_add->imageData[i*nSaveWidth*3+j+2] = cvRound(r1[0]*alpha+r2[0]*(1-alpha)); } }// CvSize size;// size.height=img->height;// size.width=img->width;// img_add=cvCreateImage(size,8,3);//创建展开存储图像// cvCopy(img, img_add, NULL); DrawPicToHDC(img_add,IDC_Img_show); cvNamedWindow("叠加图像",1); cvShowImage("叠加图像",img_add);}4.2.3 保存图像保存图像可以采取两种方法。

      一种是保存到和dsw文件同目录下另一种是保存到指定路径我采用第二种 主要代码如下:CString csFilter = csBMP + csJPG + csTIF + csPNG + csDIB + csPBM + csPGM + csPPM + csSR + csRAS; CString name[]={"", "bmp" ,"jpg", "tif", "png", "dib", "pbm", "pgm", "ppm", "sr", "ras", ""}; CString strFileName; CString strExtension; CFileDialog FileDlg(false, NULL, NULL, OFN_HIDEREADONLY, csFilter); // 文件存盘对话框 if (FileDlg.DoModal() == IDOK ) // 选择了文件名 { strFileName = FileDlg.m_ofn.lpstrFile; if (FileDlg.m_ofn.nFileExtension == 0) // 无文件后缀 { strExtension = name[FileDlg.m_ofn.nFilterIndex]; strFileName = strFileName + '.' + strExtension; // 加文件后缀 } // Save(strFileName, m_pImgSrcToSave); cvSaveImage(strFileName, img_add); // 当前画面存盘 } 5 运行结果打开图像包括打开前景图像和背景图像。

      运行结果如图5-1图5-1点击图像叠加,如图5-2:图5-2点击保存图像选择合适的路径,如图5-3:图5-36 总结本文提出的两张图片叠加的方法,经过VC6.0和OpenCV的实验论证,效果比较好,具有一定的实用价值做一个课题,前期的思路非常重要我尝试过很多方法,开始想着可以把我个人的图像在一个背景中抠出来,放到雨景中,工作量还是相当大相比较而言,本文采用修改图片的透明度的方法实现个人图像和雨景的叠加是所有我想到的方法中比较简单且方便的方法完成这次大作业的过程中,我学到了很多知识 首先,初步学习了Opencv在图像处理方面的使用以前涉猎过Opencv在视频上面的应用,并且掌握不深这次查阅了Opencv的配置和图像处理方面应用的有关资料 其次,深化了MFC编程框架的学习 再次,做任何一个工程等最好添加人机交互功能使界面美观、操作简单、项目更加人性化最后,将背景变为透明色,然后叠加到前景上的方法已经有了初步的了解,在此基础上会继续完成更复杂的课题。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.