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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(扬大电科多媒体课程设计.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

扬大电科多媒体课程设计.docx

1、扬大电科多媒体课程设计 多媒体信息处理 课 程 设 计 班级 :电科1002 姓名 :张贤慈 学号 :4 日期 :2013年5月19日1.完成情况(8位或24位bmp图).个人信息(姓名,学号)、.反色变换.调节图像亮度(加大,减小亮度).调节图像对比度(加大,减小对比度).提取彩色图像的RGB分量(红,绿,蓝).镜像操作(左右,上下).校正(显示对话框).图像逆时针旋转90(仅限正方形图).图像还原功能2程序清单及部分注释:自加宏定义等: #include math.h /自加头文件 #define Hui(x,y) *(m_pDIBData+(x)*GetBmpRealWidth()+y)

2、 /指向灰度图色彩矩阵 int Y150015003; /定义数组 int A150015003; float value;按键响应:(举一例)void CPicture224View:OnFanse() /反色变换的按键程序 / TODO: Add your command handler code here if(m_dib.m_pBMI=NULL|m_dib.m_pDIBData=NULL) AfxMessageBox(没有图像资源); return; if(m_dib.FANSE() Invalidate(TRUE); /按键有效则转至反色变换处理程序1.个人信息; 使用AfxMess

3、ageBox()函数:void CPicture224View:Onmymessage() /个人信息的按键程序 / TODO: Add your command handler code hereAfxMessageBox(电科10n4n张贤慈);/弹出该信息窗口return;2.反色: BOOL DIB:FanSe()/反色变换处理程序 int i,j,R,G,B;/定义变量 if(bih.biBitCount=24)/判断是不是24位彩图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) R=int(255-Cnumber(i,

4、j,2);/将各个颜色分量取反赋值 G=int(255-Cnumber(i,j,1); B=int(255-Cnumber(i,j,0); Cnumber(i,j,2)=(BYTE)R;/把所求反色量存回个点 Cnumber(i,j,1)=(BYTE)G; Cnumber(i,j,0)=(BYTE)B; else if(bih.biBitCount=8)/判断是不是8位图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) R=int(255-Hui(i,j);/取数据并进行反色 Hui(i,j)=(BYTE)R;/把反色量赋回该点 e

5、lse AfxMessageBox(原图既不是24位真彩图也不是8位灰度图); /弹出此窗 return false; return true;/返回true 3.调节图像亮度: .加大图像亮度 BOOL DIB:zengdaliangdu()/增加亮度处理程序 int i,j,k; double t=0; if(bih.biBitCount=24)/判断24位真彩图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) for(k=0;k3;k+) t=1.1*Cnumber(i,j,k);/颜色分量增加10% if(t255) Cnu

6、mber(i,j,k)=(unsigned char)t; /若增加后的值小于255,则赋回给颜色分量 else Cnumber(i,j,k)=255;/若大于255,则全赋为255 else/如果8位灰度图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) t=1.1*Hui(i,j);/颜色分量增加10% if(t255) Hui(i,j)=(unsigned char)t;/若增加后的值小于255,则赋回给灰度分量 else Hui(i,j)=255;/若大于255,则全赋为255 return true; .减小图像亮度: B

7、OOL DIB:jianxiao() int i,j,k; double t=0; if(bih.biBitCount=24)/判断24位真彩图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) for(k=0;k3;k+) t=0.9*Cnumber(i,j,k);/颜色分量减小10% Cnumber(i,j,k)=(unsigned char)t; /将改变后的值赋回颜色分量 else/如果8位灰度图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) t=0.9*Hdu(

8、i,j);/颜色分量减小10% Hdu(i,j)=(unsigned char)t;/将改变后的值赋回灰度分量 return true; 4.调节图像对比度: .增大对比度: BOOL DIB:zengda()/增加对比度处理程序 int i,j,Y,Cb,Cr,R,G,B,t; /定义Y,t分别为亮度和平均亮度 long int X=0; if(bih.biBitCount=8)/灰度图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Y=int(Hui(i,j);/亮度值 X=X+Y;/求图像的总亮度 t=int(X/(i*j)

9、;/图像平均亮度 for(i=0;iGetDIBHeight();i+) for(j=0;jt)Y=Y+10;/若大于平均亮度,则亮度增加;否则亮度减小 else Y=Y-10; if(Y255)Y=255; Hui(i,j)=(BYTE)Y;/保存改变后的亮度 else if(bih.biBitCount=24)/彩色图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Y=int(0.2999f*Cnumber(i,j,2)+0.587f*Cnumber(i,j,1)+0.114f*Cnumber(i,j,0);/亮度计算公式 X

10、=X+Y;/计算总量度 t=int(X/(i*j);/计算24位图像亮度平均值也是比较阀值 for(i=0;iGetDIBHeight();i+) for(j=0;jt)Y=Y+10; else Y=Y-10;/是否大于阀值,若大于,则亮度增加;否则亮度减小 if(Y255) Y=255;/判断Y值是否超出范围 R=int(Y+1.403f*Cr); G=int(Y-0.344f*Cb-0.714f*Cr); B=int(Y+1.773*Cb);/再变回RGB空间 if(R255) R=255; if(G255) G=255; if(B255) B=255;/判断R,G,B是否超出范围并进行取

11、舍 Cnumber(i,j,2)=(BYTE)R; Cnumber(i,j,1)=(BYTE)G; Cnumber(i,j,0)=(BYTE)B;/保存改变后的RGB else AfxMessageBox(原图既不是24位真彩图也不是8位灰度图); return false; return true; .减小对比度:(与增加对比度类似) BOOL DIB:tiaoxiao() int i,j,Y,Cb,Cr,R,G,B,t; long int X=0; if(bih.biBitCount=8) for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth()

12、;j+) Y=int(Hui(i,j); X=X+Y; t=int(X/(i*j); for(i=0;iGetDIBHeight();i+) for(j=0;j127)Y=Y-10;/判断是否大于平均亮度,若大于,则亮度减小;否则亮度增加 else Y=Y+10; if(Y255)Y=255; Hui(i,j)=(BYTE)Y;/把改变后亮度存回 else if(bih.biBitCount=24) for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Y=int(0.2999f*Cnumber(i,j,2)+0.587f*Cnumber

13、(i,j,1)+0.114f*Cnumber(i,j,0); X=X+Y; t=int(X/(i*j);/24位图像亮度平均值 for(i=0;iGetDIBHeight();i+) for(j=0;jt)Y=Y-10; else Y=Y+10; if(Y255) Y=255; R=int(Y+1.403f*Cr); G=int(Y-0.344f*Cb-0.714f*Cr); B=int(Y+1.773*Cb);/再变回RGB空间 if(R255) R=255; if(G255) G=255; if(B255) B=255; Cnumber(i,j,2)=(BYTE)R; Cnumber(i,

14、j,1)=(BYTE)G; Cnumber(i,j,0)=(BYTE)B;/保存改变后的RGB else AfxMessageBox(原图既不是24位真彩图也不是8位灰度图); return false; return true;5.提取彩色图像RGB分量: .红: BOOL DIB:hong()/提取红色分量处理程序 int i,j; if(bih.biBitCount!=24)/判断是不是24位彩色图 AfxMessageBox(原图不是24位真彩图); return false; for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+)

15、 Cnumber(i,j,0)=0; /提取绿色分量和蓝色分量 Cnumber(i,j,1)=0; return true; .绿: BOOL DIB:lv()/提取绿色分量处理程序 int i,j; if(bih.biBitCount!=24)/判断是不是24位彩色图 AfxMessageBox(原图不是24位真彩图); return false; for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Cnumber(i,j,0)=0;/提取蓝色分量和红色分量 Cnumber(i,j,2)=0; return true; .蓝: BOO

16、L DIB:lan()/提取绿色分量处理程序 int i,j; if(bih.biBitCount!=24)/判断是不是24位彩色图 AfxMessageBox(原图不是24位真彩图); return false; for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Cnumber(i,j,1)=0; /提取绿色分量和红色分量 Cnumber(i,j,2)=0; return true; 6.图像的镜像操作: .水平镜像: BOOL DIB:shuipingmiror()/水平镜像 int i,j,k; int temp4; if(bi

17、h.biBitCount=8)/判断是否是8位灰度图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth()/2;j+) temp0=int(Hui(i,j); Hui(i,j)=Hui(i,GetDIBWidth()-1-j); Hui(i,GetDIBWidth()-1-j)=(BYTE)temp0; else /24位真彩图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth()/2;j+) for(k=0;k3;k+) tempk=int(Cnumber(i,j,k); /将第i行,j列的第k个

18、颜色分量进行保存 Cnumber(i,j,k)=Cnumber(i,GetDIBWidth()-1-j,k);/将第i行,j列的第k个颜色分量进行保存 Cnumber(i,GetDIBWidth()-1-j,k)=(BYTE)tempk;/从保存的数组中提取右半部分的颜色分量赋值 return true; .垂直镜像: BOOL DIB:chuizhimiror()/垂直镜像 int i,j,k; int temp4; if(bih.biBitCount=8)/判断是否是8位灰度图 for(i=0;iGetDIBWidth();i+) for(j=0;jGetDIBHeight()/2;j+)

19、 temp0=int(Hui(j,i); Hui(j,i)=Hui(GetDIBHeight()-1-j,i); Hui(GetDIBHeight()-1-j,i)=(BYTE)temp0; else for(i=0;iGetDIBWidth();i+) for(j=0;jGetDIBHeight()/2;j+) for(k=0;k3;k+) tempk=int(Cnumber(j,i,k);/将第i行,j列的第k个颜色分量进行保 存 Cnumber(j,i,k)=Cnumber(GetDIBHeight()-1-j,i,k);/将上半部分的颜色分量赋给与之对应的下半部分的点 Cnumber(

20、GetDIBHeight()-1-j,i,k)=(BYTE)tempk;/从保存的数组中提取上半部分的颜色分量赋值 return true; 7.图像的校正: BOOL DIB:JiaoZh()/矫正 mydialog dlg;/定义类型为mydialog的变量 dlg.m_value=NULL; if (dlg.DoModal() != IDOK) return false; value=dlg.m_value;/把mydialog类中的m_value赋给DIB类中变量value delete dlg; /释放dlg int i,j,Y,Cb,Cr; if(bih.biBitCount=8)

21、/判断灰度图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Y=int(255*pow(Hui(i,j)/255.0,value);/对亮度进行校正 Hui(i,j)=(BYTE)Y;/把校正后的亮度赋回 else if(bih.biBitCount=24)/24位彩色图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Y=int(255*pow(Cnumber(i,j,2)/255.0,value);/校正三个颜色分量 Cb=int(255*pow(Cnumber(i

22、,j,1)/255.0,value); Cr=int(255*pow(Cnumber(i,j,0)/255.0,value); Cnumber(i,j,2)=(BYTE)Y;/保存校正后的三个颜色分量 Cnumber(i,j,1)=(BYTE)Cb; Cnumber(i,j,0)=(BYTE)Cr; else AfxMessageBox(原图既不是24位真彩图也不是8位灰度图); return false; return true;8.图像逆时针旋转90 BOOL DIB:XuanZ()/旋转90度(正方形) int i,j,B; B=GetDIBHeight()-1; if(bih.biBi

23、tCount=8)/8位灰度图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Yij0=int(Hui(i,j);/取出位图数据保存Y数组 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) (Hui(i,j)=(BYTE)YB-ji0;/把取出的位图数据按照旋转的对应关系存回灰度 else if(bih.biBitCount=24)/24位灰度图 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Yij2=int(Cnumber(i,j,2); Yij1=int(Cnumber(i,j,1); Yij0=int(Cnumber(i,j,0);/取出位图数据保存Y数组 for(i=0;iGetDIBHeight();i+) for(j=0;jGetDIBWidth();j+) Cnumber(i,j,2)=(BYTE)YB-ji2; Cnumber(i,j,1)=(BYTE)YB-ji1; Cnumber(i,j,0)=(BYTE)YB-ji0;/把取出的位

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1