c语言课设 图像处理实验报告,C语言课程设计--图像处理

《C语言课程设计--图像处理》由会员分享,可在线阅读,更多相关《C语言课程设计--图像处理(14页珍藏版)》请在人人文库网上搜索。

1、序号: 学号: * 课 程 设 计设计课程名称: C语言课程设计 题 目: 数字图像处理几何变换1 学 生 姓 名: * 学 院(系): * 专 业 班 级: * 指 导 教 师: * 专业技术职务: * 设计时间: * 年 *月 * 日 * 年 * 月 *目录1、系统的意义以及主要功能21.1系统的意义21.2图像的功能22、整个系统的功能结构图以及调用关系23、各个功能实现流程图23.1彩色图像变成灰度图像23.2几何变换之-旋转33.3几何变换之-镜像34、调试运行,程序的界面以及输入数据,以及输出结果44.1原图44.2彩色图像变为灰度图像44.3灰度图像水平镜像44.4灰度图像垂直镜。

2、像54.5彩色图像水平镜像54.6彩色图像垂直镜像54.7灰度图像旋转(48)64.8彩色图像旋转(90)65、使用说明66、C语言源程序代码77、心得体会128、实习日志139、参考文献13 1 1、系统的意义以及主要功能1.1系统的意义目前图像处理的应用越来越广泛,已经渗透到工业、航空航天、军事等各领域,在国民经济中发挥越来越大的作用1.2图像的功能读入一幅彩色的数字图像,完成一系列的几何运算,并输出每个运算的效果图1.将彩色图像变为灰度图像2.将灰度图像旋转任意角度;并对彩色图像进行相应旋转3.将灰度图像和彩色图像进行水平镜像和垂直镜像2、整个系统的功能结构图以及调用关系灰度图像彩色图像。

3、灰度图像彩色图像对灰度图像进行旋转对彩色图像进行旋转垂直镜像水平镜像主函数彩色图像变灰度图像几何变换之镜像几何变换之旋转开始读入一张彩色图像赋予变量图像性息指针开辟新空间图像遍历是否结束均值法求灰度输出图像指向下一像素点3、各个功能实现流程图3.1彩色图像变成灰度图像是否 2 3.2几何变换之-旋转 3.3几何变换之-镜像是是是否否否输入彩色图像彩色还是灰度图赋予变量图像性息开辟新空间图像元素遍历是否结束输入灰度图旋转对应代码结束开始输入彩色图像彩色还是灰度图赋予变量图像性息开辟新空间图像元素遍历是否结输入灰度图镜像对应代码结束开始否是 3 4、调试运行,程序的界面以及输入数据,以及输出结果4。

4、.1原图4.2彩色图像变为灰度图像4.3灰度图像水平镜像 4 4.4灰度图像垂直镜像4.5彩色图像水平镜像4.6彩色图像垂直镜像 5 4.7灰度图像旋转(48)4.8彩色图像旋转(90)5、使用说明编译链接后出现对话框和原始图片,按任意键即可在对话框中输入,根据对话框提示输入数字完成对应功能,出现功能图像按任意键摧毁窗口,即可继续输入完成对应功能。输入0结束变换,按任意键退出对话框。 6 6、C语言源程序代码#include mydll.h#include #include #include #include #define PI 3.14159265void main()double max。

5、a(double a,double b);/最大值void hd(int wide,int height,unsigned char*pdata,unsigned char*gray); /灰度void spjx(int wide,int height,unsigned char*pdata,int numcolors); /水平镜像void czjx(int wide,int height,unsigned char*pdata,int numcolors); /垂直镜像void hdxz(int wide,int height,struct image*p1,struct image *p。

6、2,int k); /旋转struct image img1,img2,*p2=&img2,*p1=&img1;unsigned char *pdata,*gray;int i,k,n=3,m;int wide,height;imgfiletomat(G: 1.jpg, &img1); /显示原始图像createwindow(原图);imgshow(原图,&img1);wait(0); /等待按键destroywindow(原图);height=img1.height;/像素高度wide=img1.width; /像素宽度for(i=0;(n!=0);i+)printf(nnn);printf。

7、(tt-n);printf(tt| 图像几何变换 |n); printf(tt-n); printf(tt| 1-灰 度 |n);printf(tt| 2-水平镜像 |n);printf(tt| 3-垂直镜像 |n);printf(tt| 4-旋 转 |n);printf(tt| 0-退出系统 |n);printf(tt+*|n);printf(tt-n);printf(请输入:);scanf(%d,&n);switch(n)case 0: break; 7 case 1:imgfiletomat(G: 1.jpg, &img1);pdata=img1.ptr;if(img1.numcolor。

8、s=3)img1.numcolors=1;img1.ptr=gray=(unsignedchar*)malloc(wide*height);hd(wide,height,pdata,gray);createwindow(灰度图);imgshow(灰度图,&img1);wait(0); /等待按键mattoimgfile(G: c1.jpg,&img1);free(gray);gray=NULL;destroywindow(灰度图);elseprintf(tt+*|n);printf( 请换彩色图 n);printf(tt+*|n);break;case 2:printf(tt+*|n);pri。

9、ntf(tt 1-彩色水平镜像 n);printf(tt 2-灰度水平镜像 n);printf(tt+*|n);printf(请输入:);scanf(%d,&m);if(m=1)imgfiletomat(G: 1.jpg, &img1);pdata=img1.ptr;elseimgfiletomat(G: c1.jpg, &img1);pdata=img1.ptr;spjx(wide,height,pdata,img1.numcolors);createwindow(水平镜像图);imgshow(水平镜像图,&img1);wait(0); /等待按键destroywindow(水平镜像图);b。

10、reak;case 3:printf(tt+*|n);printf(tt 1-彩色垂直镜像 n);printf(tt 2-灰度垂直镜像 n);printf(tt+*|n);printf(请输入:);scanf(%d,&m);if(m=1) 8 imgfiletomat(G: 1.jpg, &img1);pdata=img1.ptr;elseimgfiletomat(G: c1.jpg, &img1);pdata=img1.ptr;czjx(wide,height,pdata,img1.numcolors);createwindow(垂直镜像图);imgshow(垂直镜像图,&img1);wai。

11、t(0); /等待按键destroywindow(垂直镜像图);break;case 4:printf(tt+*|n);printf(tt 1-彩色旋转镜像 n);printf(tt 2-灰度旋转镜像 n);printf(tt+*|n);printf(请输入:);scanf(%d,&m);if(m=1)imgfiletomat(G: 1.jpg, &img1);pdata=img1.ptr;elseimgfiletomat(G: c1.jpg, &img1);pdata=img1.ptr;printf(输入旋转角度:t);scanf(%d,&k);hdxz(wide,height,p1,p2,。

12、k);createwindow(旋转);imgshow(旋转,&img2);wait(0); /等待按键destroywindow(旋转);break;default:printf(tt+*|n);printf( 输入错误 n);printf(tt+*|n);destroyallwindows();double maxa(double a,double b)return (ab?a:b);/灰度void hd(int wide,int height,unsigned char*pdata,unsigned char*gray)int i,j,k=0;for(i=0;i0;m-)/灰度与彩色的转。

13、换 ogray=pdata+;/遍历原图每一个值ngray=temp+wide*i+k-j*numcolors-(m-1);/对应新开辟空间的地址*ngray=*ogray;/把数据存放在新开辟的空间里if(numcolors=3)n+=2;memcpy(p,temp,wide*height*numcolors);/数据拷贝free(temp);/释放开辟的空间temp=NULL;/防止野指针/垂直镜像void czjx(int wide,int height,unsigned char*pdata,int numcolors)unsigned char*temp,*lpdst,*lpsrc;。

14、int i,j;temp=(unsigned char*)malloc(wide*height*numcolors);/开辟一个空间用以存放数据for(i=0;iptr;cosa=cos(PI*k/180.0); /角度变弧度sina=sin(PI*k/180.0);offx1 = -0.5 * wide;/以中心为原点计算原图四个角的坐标offy1 = 0.5 * height;offx2 = 0.5 * wide;offy2 = 0.5 * height;offx3 = -0.5 * wide;offy3 = -0.5 * height;offx4 = 0.5 * wide;offy4 =。

15、 -0.5 * height;nffx1 = cosa * offx1 + sina * offy1;/旋转后新图四个角的坐标nffy1 = -sina * offx1 + cosa * offy1;nffx2 = cosa * offx2 + sina * offy2;nffy2 = -sina * offx2 + cosa * offy2;nffx3 = cosa * offx3 + sina * offy3;nffy3 = -sina * offx3 + cosa * offy3;nffx4 = cosa * offx4 + sina * offy4;nffy4 = -sina * of。

16、fx4 + cosa * offy4;nwide=(int)(maxa(fabs(nffx4-nffx1),fabs(nffx3-nffx2)+0.5);/新图的宽和高nheight=(int)(maxa(fabs(nffy4-nffy1),fabs(nffy3-nffy2)+0.5);p2-width=nwide;/给img2赋值p2-height=nheight;/给img2赋值p2-numcolors=p1-numcolors;/给img2赋值/开辟一个空间用以存放数据p2-ptr=temp=(unsigned char *)malloc(nwide*nheight*(p2-numcol。

17、ors);a = - 0.5 * nwide * cosa - 0.5 * nheight * sina + 0.5 * wide;/旋转常值b = 0.5 * nwide * sina - 0.5 * nheight * cosa + 0.5 * height;/旋转常值 if(p2-numcolors=3)/判断灰度图,彩色图 11 for(y1=0;y1=0)&(y0=0)/将原图RGB值赋予新开辟空间对应的位置*(temp+)=*(pdata+y0*wide*p2-numcolors+m); *(temp+)=*(pdata+y0*wide*p2-numcolors+m+1);*(te。

18、mp+)=*(pdata+y0*wide*p2-numcolors+m+2);else*(temp+)=255;/将没有对应点的值赋255,使其变白色*(temp+)=255;*(temp+)=255; m+=3;else /进行灰度图元素遍历for(y1=0;y1=0)&(y0=0) *(temp+)=*(pdata+y0*wide+x0);/将原图的值赋予新开辟空间对应的位置else*(temp+)=255;/将没有对应点的值赋255,使其变白色7、心得体会刚开始并不了解图像如何用vc来进行几何变换,后来经过初步认识,了解到各门 12 学科的联系,c语言中用到了很多算法和数学有着紧密的联系。

19、,感受到数组与指针的强大,编程需要注意细节,不然犯错了在去找问题所在很难找出问题错在哪里。基础知识要熟练掌握,多上机,发现问题解决问题,才能在今后编程中少犯错误。8、实习日志6月17日安排:学习图像基本知识,完成彩色图像变灰度图像进度:完成了图像灰度,但并没有真正灰度(numcolors=3)6月19日安排:解决上次问题,完成水平镜像(彩色和灰度图像)进度:解决了上次问题,完成灰度图像的水平镜像,彩色图像水平镜像出现问题遇到的问题:彩色图像水平镜像后颜色改变(RGB值赋错)解决办法:调整指针指向(使RGB值赋对)6月24日安排:解决上次问题,完成垂直镜像(彩色和灰度图像)进度:完成良好6月26日安排:完成旋转(彩色和灰度图像)进度:只完成特殊值得旋转遇到问题:地址访问错误解决办法:调试逐句查看,查看哪里地址访问错误6月27日安排:完成界面设计,彩色图像旋转进度:界面设计完成良好,彩色图像仍存在问题9、参考文献VC+数字图像处理何斌 人民邮电出版社 13。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值