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

上传人:b****4 文档编号:6746168 上传时间:2023-05-10 格式:DOCX 页数:20 大小:46.34KB
下载 相关 举报
扬大电科多媒体课程设计.docx_第1页
第1页 / 共20页
扬大电科多媒体课程设计.docx_第2页
第2页 / 共20页
扬大电科多媒体课程设计.docx_第3页
第3页 / 共20页
扬大电科多媒体课程设计.docx_第4页
第4页 / 共20页
扬大电科多媒体课程设计.docx_第5页
第5页 / 共20页
扬大电科多媒体课程设计.docx_第6页
第6页 / 共20页
扬大电科多媒体课程设计.docx_第7页
第7页 / 共20页
扬大电科多媒体课程设计.docx_第8页
第8页 / 共20页
扬大电科多媒体课程设计.docx_第9页
第9页 / 共20页
扬大电科多媒体课程设计.docx_第10页
第10页 / 共20页
扬大电科多媒体课程设计.docx_第11页
第11页 / 共20页
扬大电科多媒体课程设计.docx_第12页
第12页 / 共20页
扬大电科多媒体课程设计.docx_第13页
第13页 / 共20页
扬大电科多媒体课程设计.docx_第14页
第14页 / 共20页
扬大电科多媒体课程设计.docx_第15页
第15页 / 共20页
扬大电科多媒体课程设计.docx_第16页
第16页 / 共20页
扬大电科多媒体课程设计.docx_第17页
第17页 / 共20页
扬大电科多媒体课程设计.docx_第18页
第18页 / 共20页
扬大电科多媒体课程设计.docx_第19页
第19页 / 共20页
扬大电科多媒体课程设计.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《扬大电科多媒体课程设计.docx》由会员分享,可在线阅读,更多相关《扬大电科多媒体课程设计.docx(20页珍藏版)》请在冰点文库上搜索。

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

扬大电科多媒体课程设计

《多媒体信息处理》

班级:

电科1002

姓名:

张贤慈

学号:

4

日期:

2013年5月19日

1.完成情况(8位或24位bmp图)

①.个人信息(姓名,学号)、

②.反色变换

③.调节图像亮度(加大,减小亮度)

④.调节图像对比度(加大,减小对比度)

⑤.提取彩色图像的RGB分量(红,绿,蓝)

⑥.镜像操作(左右,上下)

⑦.γ校正(显示对话框)

⑧.图像逆时针旋转90°(仅限正方形图)

⑩.图像还原功能

2.程序清单及部分注释:

自加宏定义等:

#include"math.h"//自加头文件

#defineHui(x,y)*(m_pDIBData+(x)*GetBmpRealWidth()+y)//指向灰度图色彩矩阵

intY[1500][1500][3];//定义数组

intA[1500][1500][3];

floatvalue;

按键响应:

(举一例)

voidCPicture224View:

:

OnFanse()//反色变换的按键程序

{//TODO:

Addyourcommandhandlercodehere

if(m_dib.m_pBMI==NULL||m_dib.m_pDIBData==NULL)

{AfxMessageBox("没有图像资源");

return;

}

if(m_dib.FANSE())

Invalidate(TRUE);//按键有效则转至反色变换处理程序

}

1.个人信息;

使用AfxMessageBox()函数:

voidCPicture224View:

:

Onmymessage()//个人信息的按键程序

{

//TODO:

Addyourcommandhandlercodehere

AfxMessageBox("电科10\n4\n张贤慈");//弹出该信息窗口

return;

}

2.反色:

BOOLDIB:

:

FanSe()//反色变换处理程序

{

inti,j,R,G,B;//定义变量

if(bih.biBitCount==24)//判断是不是24位彩图

{

for(i=0;i

for(j=0;j

{

R=int(255-Cnumber(i,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;

}

}

elseif(bih.biBitCount==8)//判断是不是8位图

{

for(i=0;i

for(j=0;j

{

R=int(255-Hui(i,j));//取数据并进行反色

Hui(i,j)=(BYTE)R;//把反色量赋回该点

}

}

else

{

AfxMessageBox("原图既不是24位真彩图也不是8位灰度图");//弹出此窗

returnfalse;

}

returntrue;//返回true

}

3.调节图像亮度:

①.加大图像亮度

BOOLDIB:

:

zengdaliangdu()////增加亮度处理程序

{

inti,j,k;

doublet=0;

if(bih.biBitCount==24)//判断24位真彩图

for(i=0;i

{

for(j=0;j

for(k=0;k<3;k++)

{

t=1.1*Cnumber(i,j,k);//颜色分量增加10%

if(t<255)

Cnumber(i,j,k)=(unsignedchar)t;//若增加后的值小于255,则赋回给颜色分量

else

Cnumber(i,j,k)=255;//若大于255,则全赋为255

}

}

else//如果8位灰度图

for(i=0;i

{

for(j=0;j

{

t=1.1*Hui(i,j);//颜色分量增加10%

if(t<255)

Hui(i,j)=(unsignedchar)t;//若增加后的值小于255,则赋回给灰度分量

else

Hui(i,j)=255;//若大于255,则全赋为255

}

}

returntrue;

}

②.减小图像亮度:

BOOLDIB:

:

jianxiao()

{

inti,j,k;

doublet=0;

if(bih.biBitCount==24)//判断24位真彩图

for(i=0;i

{

for(j=0;j

for(k=0;k<3;k++)

{

t=0.9*Cnumber(i,j,k);//颜色分量减小10%

Cnumber(i,j,k)=(unsignedchar)t;//将改变后的值赋回颜色分量

}

}

else//如果8位灰度图

for(i=0;i

{

for(j=0;j

{

t=0.9*Hdu(i,j);//颜色分量减小10%

Hdu(i,j)=(unsignedchar)t;//将改变后的值赋回灰度分量

}

}

returntrue;

}

4.调节图像对比度:

①.增大对比度:

BOOLDIB:

:

zengda()//增加对比度处理程序

{

inti,j,Y,Cb,Cr,R,G,B,t;//定义Y,t分别为亮度和平均亮度

longintX=0;

if(bih.biBitCount==8)//灰度图

{

for(i=0;i

{for(j=0;j

{

Y=int(Hui(i,j));//亮度值

X=X+Y;//求图像的总亮度

}

}

t=int(X/(i*j));//图像平均亮度

for(i=0;i

for(j=0;j

{Y=int(Hui(i,j));//取亮度值

if(Y>t)Y=Y+10;//若大于平均亮度,则亮度增加;否则亮度减小

elseY=Y-10;

if(Y<0){Y=0;}//判断Y值是否超出范围

if(Y>255){Y=255;}

Hui(i,j)=(BYTE)Y;//保存改变后的亮度

}

}

elseif(bih.biBitCount==24)//彩色图

{

for(i=0;i

{for(j=0;j

{

Y=int(0.2999f*Cnumber(i,j,2)+0.587f*Cnumber(i,j,1)+0.114f*Cnumber(i,j,0));//亮度计算公式

X=X+Y;//计算总量度

}

}

t=int(X/(i*j));//计算24位图像亮度平均值也是比较阀值

for(i=0;i

for(j=0;j

Y=int(0.2999f*Cnumber(i,j,2)+0.587f*Cnumber(i,j,1)+0.114f*Cnumber(i,j,0));//亮度计算公式

Cb=int(-0.169f*Cnumber(i,j,2)-0.331f*Cnumber(i,j,1)+0.5f*Cnumber(i,j,0));

Cr=int(0.5f*Cnumber(i,j,2)-0.419f*Cnumber(i,j,1)-0.081f*Cnumber(i,j,0));//先变到YCbCr空间,只对亮度Y进行操作

if(Y>t)Y=Y+10;

elseY=Y-10;//是否大于阀值,若大于,则亮度增加;否则亮度减小

if(Y<0){Y=0;}

if(Y>255){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(R<0){R=0;}

if(R>255){R=255;}

if(G<0){G=0;}

if(G>255){G=255;}

if(B<0){B=0;}

if(B>255){B=255;}//判断R,G,B是否超出范围并进行取舍

Cnumber(i,j,2)=(BYTE)R;

Cnumber(i,j,1)=(BYTE)G;

Cnumber(i,j,0)=(BYTE)B;//保存改变后的RGB

}

}

else

{

AfxMessageBox("原图既不是24位真彩图也不是8位灰度图");

returnfalse;

}

returntrue;

}

②.减小对比度:

(与增加对比度类似)

BOOLDIB:

:

tiaoxiao()

{

inti,j,Y,Cb,Cr,R,G,B,t;

longintX=0;

if(bih.biBitCount==8)

{

for(i=0;i

{for(j=0;j

{

Y=int(Hui(i,j));

X=X+Y;

}

}

t=int(X/(i*j));

for(i=0;i

for(j=0;j

{Y=int(Hui(i,j));

if(Y>127)Y=Y-10;//判断是否大于平均亮度,若大于,则亮度减小;否则亮度增加

elseY=Y+10;

if(Y<0){Y=0;}

if(Y>255){Y=255;}

Hui(i,j)=(BYTE)Y;//把改变后亮度存回

}

}

elseif(bih.biBitCount==24)

{

for(i=0;i

{for(j=0;j

{

Y=int(0.2999f*Cnumber(i,j,2)+0.587f*Cnumber(i,j,1)+0.114f*Cnumber(i,j,0));

X=X+Y;

}

}

t=int(X/(i*j));//24位图像亮度平均值

for(i=0;i

for(j=0;j

{

Y=int(0.2999f*Cnumber(i,j,2)+0.587f*Cnumber(i,j,1)+0.114f*Cnumber(i,j,0));//先变到YCbCr空间,只对亮度Y进行操作

Cb=int(-0.169f*Cnumber(i,j,2)-0.331f*Cnumber(i,j,1)+0.5f*Cnumber(i,j,0));

Cr=int(0.5f*Cnumber(i,j,2)-0.419f*Cnumber(i,j,1)-0.081f*Cnumber(i,j,0));

if(Y>t)Y=Y-10;

elseY=Y+10;

if(Y<0){Y=0;}

if(Y>255){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(R<0){R=0;}

if(R>255){R=255;}

if(G<0){G=0;}

if(G>255){G=255;}

if(B<0){B=0;}

if(B>255){B=255;}

Cnumber(i,j,2)=(BYTE)R;

Cnumber(i,j,1)=(BYTE)G;

Cnumber(i,j,0)=(BYTE)B;//保存改变后的RGB

}

}

else

{

AfxMessageBox("原图既不是24位真彩图也不是8位灰度图");

returnfalse;

}

returntrue;

}

5.提取彩色图像RGB分量:

①.红:

BOOLDIB:

:

hong()//提取红色分量处理程序

{

inti,j;

if(bih.biBitCount!

=24)//判断是不是24位彩色图

{

AfxMessageBox("原图不是24位真彩图");

returnfalse;

}

for(i=0;i

for(j=0;j

{

Cnumber(i,j,0)=0;//提取绿色分量和蓝色分量

Cnumber(i,j,1)=0;

}

returntrue;

}

②.绿:

BOOLDIB:

:

lv()//提取绿色分量处理程序

{

inti,j;

if(bih.biBitCount!

=24)//判断是不是24位彩色图

{

AfxMessageBox("原图不是24位真彩图");

returnfalse;

}

for(i=0;i

for(j=0;j

{

Cnumber(i,j,0)=0;//提取蓝色分量和红色分量

Cnumber(i,j,2)=0;

}

returntrue;

}

③.蓝:

BOOLDIB:

:

lan()//提取绿色分量处理程序

{

inti,j;

if(bih.biBitCount!

=24)//判断是不是24位彩色图

{

AfxMessageBox("原图不是24位真彩图");

returnfalse;

}

for(i=0;i

for(j=0;j

{

Cnumber(i,j,1)=0;//提取绿色分量和红色分量

Cnumber(i,j,2)=0;

}

returntrue;

}

6.图像的镜像操作:

①.水平镜像:

BOOLDIB:

:

shuipingmiror()//水平镜像

{

inti,j,k;

inttemp[4];

if(bih.biBitCount==8)//判断是否是8位灰度图

{

for(i=0;i

for(j=0;j

{

temp[0]=int(Hui(i,j));

Hui(i,j)=Hui(i,GetDIBWidth()-1-j);

Hui(i,GetDIBWidth()-1-j)=(BYTE)temp[0];

}

}

else//24位真彩图

{

for(i=0;i

for(j=0;j

{

for(k=0;k<3;k++)

{

temp[k]=int(Cnumber(i,j,k));//将第i行,j列的第k个颜色分量进行保存Cnumber(i,j,k)=Cnumber(i,GetDIBWidth()-1-j,k);//将第i行,j列的第k个颜色分量进行保存

Cnumber(i,GetDIBWidth()-1-j,k)=(BYTE)temp[k];/从保存的数组中提取右半部分的颜色分量赋值

}

}

}

returntrue;

}

②.垂直镜像:

BOOLDIB:

:

chuizhimiror()//垂直镜像

{

inti,j,k;

inttemp[4];

if(bih.biBitCount==8)//判断是否是8位灰度图

{

for(i=0;i

for(j=0;j

{

temp[0]=int(Hui(j,i));

Hui(j,i)=Hui(GetDIBHeight()-1-j,i);

Hui(GetDIBHeight()-1-j,i)=(BYTE)temp[0];

}

}

else

{

for(i=0;i

for(j=0;j

{

for(k=0;k<3;k++)

{temp[k]=int(Cnumber(j,i,k));//将第i行,j列的第k个颜色分量进行保存

Cnumber(j,i,k)=Cnumber(GetDIBHeight()-1-j,i,k);//将上半部分的颜色分量赋给与之对应的下半部分的点

Cnumber(GetDIBHeight()-1-j,i,k)=(BYTE)temp[k];//从保存的数组中提取上半部分的颜色分量赋值

}

}

}

returntrue;

}

7.图像的γ校正:

BOOLDIB:

:

JiaoZh()//γ矫正

{

mydialogdlg;//定义类型为mydialog的变量

dlg.m_value=NULL;

if(dlg.DoModal()!

=IDOK)

{

returnfalse;

}

value=dlg.m_value;//把mydialog类中的m_value赋给DIB类中变量value

deletedlg;//释放dlg

inti,j,Y,Cb,Cr;

if(bih.biBitCount==8)//判断灰度图

{

for(i=0;i

for(j=0;j

{

Y=int(255*pow(Hui(i,j)/255.0,value));//对亮度进行校正

Hui(i,j)=(BYTE)Y;//把校正后的亮度赋回

}

}

elseif(bih.biBitCount==24)//24位彩色图

{

for(i=0;i

for(j=0;j

{

Y=int(255*pow(Cnumber(i,j,2)/255.0,value));//校正三个颜色分量

Cb=int(255*pow(Cnumber(i,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位灰度图");

returnfalse;

}

returntrue;

}

8.图像逆时针旋转90°

BOOLDIB:

:

XuanZ()//旋转90度(正方形)

{

inti,j,B;

B=GetDIBHeight()-1;

if(bih.biBitCount==8)//8位灰度图

{

for(i=0;i

for(j=0;j

{

Y[i][j][0]=int(Hui(i,j));//取出位图数据保存Y数组

}

for(i=0;i

for(j=0;j

{

(Hui(i,j))=(BYTE)Y[B-j][i][0];//把取出的位图数据按照旋转的对应关系存回灰度

}

}

elseif(bih.biBitCount==24)//24位灰度图

{

for(i=0;i

for(j=0;j

{

Y[i][j][2]=int(Cnumber(i,j,2));

Y[i][j][1]=int(Cnumber(i,j,1));

Y[i][j][0]=int(Cnumber(i,j,0));//取出位图数据保存Y数组

}

for(i=0;i

for(j=0;j

{

Cnumber(i,j,2)=(BYTE)Y[B-j][i][2];

Cnumber(i,j,1)=(BYTE)Y[B-j][i][1];

Cnumber(i,j,0)=(BYTE)Y[B-j][i][0];//把取出的位

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

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

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