搜索
您的当前位置:首页简易photoshop代码数字图像处理实验报告

简易photoshop代码数字图像处理实验报告

来源:小侦探旅游网

一.一个简单的“photoshop”软件

二.设计目的:

数字图像处理,就是用数字计算机及其他有关数字技术,对图像进行处理,以达到预期的目的。随着计算机的发展,图像处理技术在许多领域得到了广泛应用,数字图像处理已成为电子信息、通信、计算机、自动化、信号处理等专业的重要课程。

数字图像处理课程设计是在完成数字图像处理的相关理论的学习后,进行的综合性训练课程,其目的主要包括:

1、使学生进一步巩固数字图像处理的基本概念、理论、分析方法和实现方法;

2、增强学生应用VC++编写数字图像处理的应用程序及分析、解决实际问题的能力;

3、尝试将所学的内容解决实际工程问题,培养学生的工程实践能力,提高工科学生的就业能力。

三.设计内容:

1.打开图像:

主要代码:

staticcharszFilter[]="BMP文件(.bmp)|.bmp||";/定义过滤文件的类型

CStringfilename;

intret=XXX();/运行打开文件对方框

if(ret==IDOK){filename=XXX();/获取所选择图像的路径XXX(filename);/加载图像if(!XXX)/判断是否加载图像成功{Af_MessageBo_("图像打不开");}return;CFileDialogdlg(TRUE,"bmp",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);/定义文件对话框对

效果图:

2.水平镜像:把图像的第一列和最后一列调转,第二列和倒数第二列换过来,以此类推下去,直到第nw/2为止。

inttemp,i,j;

for(j=0;j

for(i=0;i

XXX]=temp;

效果图:

3.素描风格:先把灰度值与右下的作对比,如果差值大于一个值则说明这是轮廓,先把非轮廓的位置像素置为黑色,最后对所有像素进行底片化处理

inttemp,i,j;

for(j=0;j

for(i=0;i

for(j=0;j

for(i=0;i

效{intgray=XXX];XXX]=255-gray;}果图

4图像雾化:在图像中引入一定的随机值,打乱图像中的像素值

inti,j,k,dat;/i表示列,j表行

byteptemp=(byte)newbyte[nwnh];

memset(ptemp,0,nwnh);

for(j=0;j

for(i=0;i

k=rand()%8;/取任意的随机值

dat=jnw+i+k;if(dat>=nwnh)dat=nwnh-1;ptemp[jnw+i]=XXX;

memcpy(XXX,ptemp,nwnh);

效果图:

5.浮雕处理:通过勾画图象轮廓和降低周围像素色值,从而生成具有凹凸感的浮雕效果。其方法是生成一缓冲区,计算当前像素的左上角与右下角的像素值之差,再加上一个补值。将其存储到缓冲区。再将缓冲区的数据逐点替换到图像中并显示出来。

intw=3,i,j;/w为模板宽度

BYTEp=newBYTE[nwnh];

memcpy(p,XXX,nwnh);

for(j=w/2;j

for(i=w/2;i

p[jnw+i]=XXX[(j-1)nw+i-1](1)+XXX[(j+1)nw+i+1](-1)+120;}

memcpy(XXX,p,nwnh);

delete[]p;

效果图:

6.直方图均衡化

intn[256]={0},g[256]={0};/定义频数数组n,均衡化每个像素的灰度级的数组gdoublef[256],t[256];/定义频率数组f,累加的频率数组t

intg_ma_=0,g_mim=255;

inti,j,k,z;

for(j=0;j

for(i=0;i

n[z]++;

for(k=0;k<=255;k++)/统计每个灰度级出现的频率

f[k]=n[k]/(nwnh1.0);/累计灰度级的频率

t[0]=f[0];

for(k=1;k<=255;k++)

t[k]=t[k-1]+f[k];

for(j=0;j

for(i=0;ig_ma_w:g_ma_;/得到最大值g_mim=w

g[k]=(int)((g_ma_-g_mim)t[k]+g_mim+0.5);

for(j=0;j

for(i=0;i

k=XXX];

XXX]=g[k];

for(j=0;j

{/绘制原图像的直方图

for(i=0;iMoveTo(410,nh+20);/(410,nh+20)是直方图的左上角坐标/垂直轴pDC->LineTo(410,nh+200);/(410,nh+200)是直方图的左下角坐标/水平轴pDC->LineTo(710,nh+200);/(710,nh+200)是直方图的右下角坐标/写_轴刻度值XXX("0");pDC->Te_tOut(410,nh+200+10,str);XXX("50");pDC->Te_tOut(460,nh+200+10,str);XXX("100");pDC->Te_tOut(510,nh+200+10,str);XXX("150");pDC->Te_tOut(560,nh+200+10,str);XXX("200");pDC->Te_tOut(610,nh+200+10,str);XXX("255");pDC->Te_tOut(665,nh+200+10,str);/绘制_轴刻度for(i=0;i<256;i+=25){if((i1)==0){}/10的倍数pDC->MoveTo(i+10,nh+200-2);pDC->LineTo(i+10,nh+200+2);

}else{}/10的倍数pDC->MoveTo(i+10,nh+200-2);pDC->LineTo(i+10,nh+200+2);}/绘制_轴箭头pDC->MoveTo(705,nh+200-5);pDC->LineTo(710,nh+200);pDC->LineTo(705,nh+200+5);/绘制y轴箭头pDC->MoveTo(410,nh+20);pDC->LineTo(405,nh+20+5);pDC->MoveTo(410,nh+20);pDC->LineTo(415,nh+20+5);intma_=0;for(i=0;i<256;i++)if(m_yuan[i]>ma_){}ma_=m_yuan[i];for(i=0;i<256;i++)pDC->MoveTo(410+i,nh+200);pDC->LineTo(410+i,nh+200-(m_yuan[i]160/ma_));}if(m_bHist==true)/绘画新的直方图{CStringstr;intnh=XXX();inti;/画坐标轴/绘制坐标轴pDC->MoveTo(10,nh+20);/(10,nh+20)是直方图的左上角坐标/垂直轴pDC->LineTo(10,nh+200);/(10,nh+200)是直方图的左下角坐标/水平轴pDC->LineTo(310,nh+200);/(310,nh+200)是直方图的右下角坐标/写_轴刻度值XXX("0");

pDC->Te_tOut(10,nh+200+10,str);XXX("50");pDC->Te_tOut(60,nh+200+10,str);XXX("100");pDC->Te_tOut(110,nh+200+10,str);XXX("150");pDC->Te_tOut(160,nh+200+10,str);XXX("200");pDC->Te_tOut(210,nh+200+10,str);XXX("255");pDC->Te_tOut(265,nh+200+10,str);/绘制_轴刻度for(i=0;i<256;i+=25){if((i1)==0){/10的倍数}else{/10的倍数pDC->MoveTo(i+10,nh+200-2);pDC->LineTo(i+10,nh+200+2);pDC->MoveTo(i+10,nh+200-2);pDC->LineTo(i+10,nh+200+2);}}/绘制_轴箭头pDC->MoveTo(305,nh+200-5);pDC->LineTo(310,nh+200);pDC->LineTo(305,nh+200+5);/绘制y轴箭头pDC->MoveTo(10,nh+20);pDC->LineTo(5,nh+20+5);pDC->MoveTo(10,nh+20);pDC->LineTo(15,nh+20+5);intma_=0;for(i=0;i<256;i++)if(m_hist[i]>ma_){ma_=m_hist[i];for(i=0;i<256;i++)pDC->MoveTo(10+i,nh+200);pDC->LineTo(10+i,nh+200-(m_hist[i]160/ma_));

效果图:

四.心得体会:

通过这次数字图像处理的课程设计,对图片有了更深一层的认识,理解了对图像处理的一些原理,在这个课程设计过程中,需要自己去查阅资料,找资料,还需要理解所找到的资料,遇到问题独立去思考,或者去请教同学,给了我一个很好的锻炼机会,做事情一定要坚持,最后一定会有收获的。

五.参考文献:

《数字图像处理》——电子工业出版社

《vc++数字图像处理实验指导书》曹老师、何XX

因篇幅问题不能全部显示,请点此查看更多更全内容

Top