ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:1.87MB ,
资源ID:6977857      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-6977857.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VC++图像处理程序实验.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

VC++图像处理程序实验.docx

1、VC+图像处理程序实验数字图像处理实验指导书 天津理工大学计算机科学与通信学院 杨淑莹 2009-4-16目录数字图像处理实验指导书 11. 总述 32. 试验题目 32.1 实验(一) 32.2 实验(二) 172.3.实验(三) 262.4 实验(四) 321.总述数字图像处理课程实验使学生将理论和实际结合起来,增强学生的动手编程能力。其目的使学生将所学内容灵活运用和掌握,拓展学生的思维。本文档详细描述了数字图像处理的四次实验的实验目的和实验步骤,及较为详细的编程代码以及实验效果。2.试验题目2.1 实验(一) 实验名称 图像的特效显示 软件环境 windows VC+6.0 实验目的 1

2、 实现图像颜色修改处理。2 将图像中的红气球物体左右、上下、对称复制。3 实现图像的渐隐显示。4 自行设计图像的几何变换显示。 实验内容(应包括实验题目、实验要求、实验任务等)1 实现图像颜色修改处理要求:显示一幅位图,实现图像颜色修改处理。(1)在左视图中打开一幅bmp位图,包括256色或真彩色位图(2)制作一个【图像颜色修改处理】菜单,将消息映射到右视图中,在右视图中显示位图,完成图像颜色修改处理显示功能。2. 将图像中的红气球物体左右、上下、对称复制。要求:在左视图中打开一幅256色的灰度bmp位图。将图像中的红气球物体左右、上下、对称复制。 (1)在左视图中打开一幅bmp位图,包括25

3、6色或真彩色位图(2)制作一个【红气球复制】菜单,将消息映射到右视图中,在右视图中,完成将图像中的红气球物体左右、上下、对称复制功能。3. 实现图像渐隐显示。要求:显示一幅位图,实现图像渐隐显示。(1)在左视图中打开一幅bmp位图,包括256色或真彩色位图(2)制作一个【图像渐隐显示】菜单,将消息映射到右视图中,在右视图中显示位图,完成图像图像渐隐显示功能。 4. 自行设计图像的几何变换。(选作) 要求:自行设计图像的几何变换。 (1)在左视图中打开一幅bmp位图,包括256色或真彩色位图(2)制作一个【自行设计图像的几何变换】菜单,将消息映射到右视图中,在右视图中自行设计图像的特效显示,完成

4、图像的几何变换功能。 实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论). 图像颜色修改处理编程思路: 该程序只针对24位彩色位图,不适用于灰度位图。当原图的像素点为蓝色时,将 显示屏幕上该位置的像素点像素值置为绿色,否则不变,将原图像素值赋给新图。程序代码:void CDynSplitView2:OnYansexiugai() /刷新屏幕 CDC *pDC=GetDC(); CRect rect(0,0,1000,1000); CBrush brush(RGB(255,255,255); pDC-FillRect(&rect,&brush); /复制图像数据 clearmem(

5、); CDSplitDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(!pDoc -statedoc&state2=1 ) BYTE* pBitmapData = CDibNew1-GetData(); LPBITMAPINFO pBitmapInfo = CDibNew1-GetInfo(); int bitmapHeight= CDibNew1-GetHeight(); int bitmapWidth = CDibNew1-GetWidth(); LPBYTE temp; temp=new BYTECDibNew1-GetHeight()*

6、CDibNew1-GetWidth()*3; memset (temp,0,CDibNew1-GetHeight()*CDibNew1-GetWidth()*3); for(int j = 0; j bitmapHeight; j+) for(int i = 0; i GetSafeHdc(), 0, 0, bitmapWidth, bitmapHeight, 0, 0, bitmapWidth, bitmapHeight, temp, pBitmapInfo, DIB_RGB_COLORS, SRCCOPY);memcpy ( pBitmapData,temp,CDibNew1-GetHei

7、ght()*CDibNew1-GetWidth()*3); delete temp; 实验效果 2. 将图像中的红气球物体左右、上下、对称复制。代码设计思路:将气球画在图的上部四分一处,但图的大小为1,显示时将图像的上部四分一处复制四次,分别显示在左图。程序核心代码:void CDynSplitView2:OnHongqiqiufuzhi() / TODO: Add your command handler code here int i,j; /刷新屏幕 CDC *pDC=GetDC(); CRect rect(0,0,1000,1000); CBrush brush(RGB(255,255

8、,255); pDC-FillRect(&rect,&brush); /复制图像数据 clearmem(); CDSplitDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(!pDoc -statedoc&state2=1 ) BYTE* pBitmapData = CDibNew1-GetData(); LPBITMAPINFO pBitmapInfo = CDibNew1-GetInfo(); int bitmapHeight= CDibNew1-GetHeight(); int bitmapWidth = CDibNew1-GetWidt

9、h(); LPBYTE temp; temp=new BYTECDibNew1-GetHeight()*CDibNew1-GetWidth()*3; memset (temp,0,CDibNew1-GetHeight()*CDibNew1-GetWidth()*3); for( j = 0; j bitmapHeight; j+) for( i = 0; i GetSafeHdc(), 0,bitmapHeight/2, bitmapWidth/2, bitmapHeight/2, 0,bitmapHeight/2, bitmapWidth/2, bitmapHeight/2, temp, p

10、BitmapInfo, DIB_RGB_COLORS, SRCCOPY); :StretchDIBits(pDC-GetSafeHdc(), bitmapWidth/2, 0, bitmapWidth/2, bitmapHeight/2, 0,bitmapHeight/2, bitmapWidth/2, bitmapHeight/2, temp, pBitmapInfo, DIB_RGB_COLORS, SRCCOPY); :StretchDIBits(pDC-GetSafeHdc(), 0,0, bitmapWidth/2, bitmapHeight/2, 0,bitmapHeight/2,

11、 bitmapWidth/2, bitmapHeight/2, temp, pBitmapInfo, DIB_RGB_COLORS, SRCCOPY); :StretchDIBits(pDC-GetSafeHdc(),bitmapWidth/2, bitmapHeight/2, bitmapWidth/2, bitmapHeight/2, 0,bitmapHeight/2, bitmapWidth/2, bitmapHeight/2, temp, pBitmapInfo, DIB_RGB_COLORS, SRCCOPY);memcpy ( pBitmapData,temp,CDibNew1-G

12、etHeight()*CDibNew1-GetWidth()*3); delete temp; 实验效果3. 图像渐隐显示编程思路:先记录下图想的每个像素点的像素值,显示的时候先将屏幕显示原图,将循环显示n次,这里设n从256,255,2,1,0。每一次显示像素值的n/256倍,图像的像素点计算一遍后,显示一次,重复执行上述过程,直至屏幕上所有的像素点全变黑。程序代码:void CDynSplitView2:OnTuxiangjianyin() /刷新屏幕 CDC *pDC=GetDC(); CRect rect(0,0,1000,1000); CBrush brush(RGB(255,255

13、,255); pDC-FillRect(&rect,&brush); /复制图像数据 clearmem(); CDSplitDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(!pDoc -statedoc&state2=1 ) BYTE* pBitmapData = CDibNew1-GetData(); LPBITMAPINFO pBitmapInfo = CDibNew1-GetInfo(); int bitmapHeight= CDibNew1-GetHeight(); int bitmapWidth = CDibNew1-GetWidt

14、h(); if (CDibNew1-GetRGB() / Has a color table CPalette * hPalette=CreateBitmapPalette(CDibNew1); CPalette * hOldPalette = pDC-SelectPalette(hPalette, true); pDC-RealizePalette(); LPBYTE temp,temp1,temp2; temp=new BYTECDibNew1-GetHeight()*CDibNew1-GetWidth(); memset(temp,0,CDibNew1-GetHeight()*CDibN

15、ew1-GetWidth(); for(int n=256;n=0;n-) temp1=pBitmapData; temp2=temp; for(int j = 0; j bitmapHeight; j+) for(int i = 0; i GetSafeHdc(),0, 0, bitmapWidth,bitmapHeight, 0, 0, bitmapWidth, bitmapHeight, temp,pBitmapInfo, DIB_RGB_COLORS, SRCCOPY); Sleep(10); pDC-SelectPalette(hOldPalette, true); :DeleteO

16、bject(hPalette); delete temp; else LPBYTE temp; temp=new BYTECDibNew1-GetHeight()*CDibNew1-GetWidth()*3; memset (temp,0,CDibNew1-GetHeight()*CDibNew1-GetWidth()*3); for(int m=256;m=0;m-) for(int j = 0; j bitmapHeight; j+) for(int i = 0; i GetSafeHdc(), 0, 0, bitmapWidth, bitmapHeight, 0, 0, bitmapWi

17、dth, bitmapHeight, temp, pBitmapInfo, DIB_RGB_COLORS, SRCCOPY); Sleep(10); delete temp; 实验效果4. 自行设计图像的几何变换放大后做水平、垂直镜像编程思路:取得原图的数据区指针;通过对话框获得放大整数比例:X,Y,更改图像的宽度和高度;每个像素依稀次循环,计算该像素在原图像中的坐标,将原图的像素值赋给目标像素相应X*Y个值。放大过程完成。取得原图的数据区指针;开辟一个同样大小的缓冲区;每个像素依次循环,在水平镜像中,将原图中的像素点的水平坐标变成镜像后的坐标(用图像的宽度减去坐标值)在显示到图像上。垂直景镜

18、像中,则对垂直坐标做相应的处理。(1)放大后做镜像程序代码:void CDynSplitView2:OnFangdashuipingjingxiang() clearmem(); float xzoom,yzoom; CDlgSuoFang dlg; / 定义对话框 dlg.m_XZoom=2.0; dlg.m_YZoom=2.0; / 显示对话框,提示用户设定窗口上下限 if (dlg.DoModal() != IDOK) return; / 返回 xzoom=dlg.m_XZoom; yzoom=dlg.m_YZoom; delete dlg; / 删除对话框 / 源图像的宽度和高度 LO

19、NG wide; LONG height; / 缩放后图像的宽度和高度 LONG newwide; LONG newheight; LONG newLineBytes; LPBYTE temp; / 获取图像的宽度和高度 wide = CDibNew1-GetWidth(); height = CDibNew1-GetHeight(); if(CDibNew1-m_pBitmapInfoHeader-biBitCountm_pData=CDibNew1-FangDa(temp,xzoom,yzoom,wide,height,newLineBytes,newheight); CDibNew1-S

20、etWidth(newwide); CDibNew1-SetHeight(newheight); CDibNew1-JingXiang(TRUE); /调用水平镜像处理函数 Invalidate(); /调用刷新函数 else / 计算缩放后的图像宽度和高度 newwide = (LONG) (wide * xzoom*3); newheight = (LONG) (height * yzoom); / 分配内存,以保存新DIB temp = new BYTE newwide * newheight; memset(temp,0,newwide * newheight); CDibNew1-m

21、_pData=CDibNew1-FangDa(temp,xzoom,yzoom,wide,height,newwide,newheight); CDibNew1-SetWidth(newwide/3); CDibNew1-SetHeight(newheight); CDibNew1-JingXiang(TRUE); /调用水平镜像处理函数 Invalidate(); /调用刷新函数 放大代码:LPBYTE TeXiaoXianShiDib:FangDa(LPBYTE temp, float xzoom, float yzoom,LONG wide,LONG height,LONG newwid

22、e,LONG newheight) / 指向源图像的指针 LPBYTE p_data ; LPBYTE temp1; / 指向源象素的指针 LPBYTE lpSrc; / 指向缩放图像对应象素的指针 LPBYTE lpDst; int i; int j; / 象素在源DIB中的坐标 int i0; int j0; p_data=this-GetData(); / 获取图像的宽度 int k1=(int)yzoom ; int k2= (int)xzoom ; if(m_pBitmapInfoHeader-biBitCount9) /灰度图像 temp1 = new BYTEnewwide *

23、newheight; memset(temp1,(BYTE)255,newwide * newheight); / 针对图像每行进行操作 for(j = 0; j newheight; j+) / 针对图像每列进行操作 for(i = 0; i = 0) & (i0 = 0) & (j0 height) lpSrc=(LPBYTE)p_data + wide * j0 + i0; *lpDst=*lpSrc; temp=temp1; return temp; else /24位彩色 / 分配内存,以保存新DIB temp1 = new BYTEnewwide * newheight*4; memset(temp1,255,newwide * newheight*4); int r,g,b; / 针对图像每行进行操作 for(j = 0; j height; j+) / 针对图像每列进行操作 for(i = 0; i wide; i+) lpSrc = (LPBYTE)p_data + wide * j*3 + i*3; r=*lpSrc+

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

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