C++课程设计报告(共27页).docx

上传人:飞****2 文档编号:14055834 上传时间:2022-05-02 格式:DOCX 页数:27 大小:193.25KB
返回 下载 相关 举报
C++课程设计报告(共27页).docx_第1页
第1页 / 共27页
C++课程设计报告(共27页).docx_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《C++课程设计报告(共27页).docx》由会员分享,可在线阅读,更多相关《C++课程设计报告(共27页).docx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上面向对象程序设计课程设计报告 学 号: 班级序号: 姓 名: 指导老师: 成 绩: 中国地质大学实习题目一【题目需求】 给定一幅单波段影像imgData.txt(ASCII格式),实现对图像的处理和显示。已知条件:(1)clrTbl.txt文件是一个颜色查找表,大小是256X3,即可表示256中RGB的颜色。(2)ImgData.txt文件中是图像的数据,每个值代表一个像素的颜色索引号,通过索引号到颜色查找表(clrTbl.txt文件)中找到相应的RGB颜色值。(3):一种非线性平滑技术,它将每一点的设置为该点某邻域窗口内(这里选择3X3)的所有像素点灰度值的。(4)

2、屏幕上显示像素点的函数:SetPixel(HDC drawDevice, long X, long Y, COLORREF rgbVal);基本要求:(1)定义一个中值滤波器,并实现图像的中值滤波;(2)将中值滤波的结果输出到二进制文件resImg.rs中;拔高要求:(3)在屏幕上分别显示原始图像和中值滤波结果图像。【实现过程】(1) 思想: 首先构造结构体用来存储R/G/B,然后从文件中读取像素点的值利用颜色查找表打印出来,再利用中值滤波器对中间图像处理,边缘图像选用中值滤波器和靠内的像素覆盖来观察效果。最后输出将中值滤波结果输出到二进制文件。(2) 实现过程:从文件中读取各点的像素值从文件

3、中读入颜色查找表将中值滤波后结果输入到二进制文件设置句柄利用颜色查找表打印图像制作中值滤波器使图像平滑,并在边缘进行处理【感想】 该程序的重点即在把制作中值滤波器用旁边点的中值代替中间点,思路较为明确,因而不是很难。【附录】源程序清单:/ 中值滤波.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include DeviceContext.h#include#include#include #include #include using namespace std; struct myRGBshort R;short G;short B;int _tmain(in

4、t argc, _TCHAR* argv) int a,b;myRGB rgb256;int s2;HWND mmm;/获得句柄HDC hdc;mmm=GetConsoleWindow();hdc=GetDC(mmm); ifstream myfile;ifstream myfileo;myfile.open(1-clrTbl.txt);myfile a b ;for(int j=0; jrgbj.Rrgbj.Grgbj.B;myfileo.open(1-ImgData.txt);myfileos0s1;/couts0s1;该句用于先开始查看遥感图像像素点个数short *my=new sho

5、rt*s0;for(int i=0;is0;i+)myi=new shorts1;short *my1=new short*s0;for(int i=0;is0;i+)my1i=new shorts1;for(int i=0; is0; i+)for(int j=0; jmyij;/从文件中读取for(int i=0;is0;i+)for(int j=0;js1;j+)my1ij=myij;for(int i=0;is0;i+)/打印原始图像for(int j=0;js1;j+)int t=myij;int r=rgbt.R;int g=rgbt.G;int b=rgbt.B;SetPixel

6、(hdc, j, i, RGB(r,g,b); for(int i=1;is0-1;i+)/用中值滤波器进行处理for(int j=1;js1-1;j+)short a9;int k=0;for(int ii=i-1;iii+2;+ii)for(int jj=j-1;jjj+2;+jj)ak+=myiijj;for(int m=0;m5;+m)int min =m;for(int n=m+1;n9;+n)if(anamin)min=n;int temp=am;am=amin;amin=temp;my1ij=a4;for(int i=0;is0;i+)/打印图像for(int j=0;js1;j

7、+)int t=my1ij;int r=rgbt.R;int g=rgbt.G;int b=rgbt.B;SetPixel(hdc, j+330, i, RGB(r,g,b); for(int i=0;i1;i+)/用中值滤波器处理边缘for(int j=1;js1-1;j+)short a5;int k=0;for(int ii=i;iii+2;+ii)for(int jj=j-1;jjj+2;+jj)ak+=myiijj;for(int m=0;m3;+m)int min =m;for(int n=m+1;n5;+n)if(anamin)min=n;int temp=am;am=amin;

8、amin=temp;int r=a2;my1i0=r;for(int j=1;js1;j+)/用附近点进行边缘处理my10j=my11j;for(int j=1;js1;j+)my1s0-1j=my1s0-2j;for(int i=0;is0;i+)/打印图像for(int j=0;js1;j+)int t=my1ij;int r=rgbt.R;int g=rgbt.G;int b=rgbt.B;SetPixel(hdc,j, i+260, RGB(r,g,b); ofstream file (resImg.rs,ios_base:binary|ios_base:out);file.write

9、(reinterpret_cast(&my1),sizeof(my1);/写入文件ifstream file1;file1.open(resImg.rs,ios_base:binary|ios_base:in);file1.read(char*)&my1,sizeof(my1);/ for(int i=0;i20;i+)/仅用20*20样本对比监测数据/for(int j=0;j20;j+)/coutmyji ;for(int i=0;is0;i+)/释放内存delete myi;deletemy;for(int i=0;is0;i+)delete my1i;deletemy1;system(

10、pause);return 0;实现功能及效果 实习题目二【题目需求】 样本点的多项式曲线拟合:给定n个样本点(x,y),根据多项式曲线拟合公式,拟合出一条逼近的曲线函数。已知条件:(1)样本点的生成方法:(sin()是余弦函数,rand()是随机函数)y = sin(0.1*x)+ noise; 其中,x = 1100,noise = rand(1100)*0.3,noise是随机噪声。(2)多项式曲线拟合公式:y(x,w) = w0 + w1*x1 + w2*x2 + + wn*xn(3)在程序输出窗口里绘制图形的函数:DrawText(HDC drawDevice, long X, lo

11、ng Y, char* text); /在(x,y)处绘字符MoveTo(HDC drawDevice, long X, long Y); /移动到某个点处LineTo(HDC drawDevice, long X, long Y); /画线到某个点处基本要求:(1)根据给定的条件,计算出带噪声的样本点集合,并将其输出到文本文件samp.txt中;(2)通过线性方程组求解,计算出多项式曲线拟合的系数wi(1=i=n),并将其输出;拔高要求:(3)将原始的样本点和求解的拟合曲线用不同的颜色绘制在窗口,进行显示对比;并通过调整多项式的次数,观察何时会发生过度拟合现象。【实现过程】(1)思想:这个是

12、比较复杂的。首先得到噪声点,再用最小二乘法得到拟合曲线,用textout绘制噪声点,用冒泡排序法法找到x值最小的噪声点,以此找到对应y值,开始用求得的拟合系数来增加x值获得y值连线得到拟合曲线。再绘制一次不同系数观察对比。最小二乘法得到拟合w值(2) 实现过程:得到噪声点冒泡排序找到x最小值利用拟合系数算出x增加时y值并绘制曲线绘制多条进行对比(【感想】 可以看出来最后打出来的曲线相当漂亮,利用冒泡排序法找出最小值因而曲线最终这么漂亮,谢了五堂课程设计课,十分辛苦完成的,拟合感觉也非常好。恩,我很满意的作品。【附录】/ fw1.cpp : 定义控制台应用程序的入口点。/#include std

13、afx.h#include#include#include#include#include#include#includeusing namespace std;#include DeviceContext.hvoid solve(int m, int number,float *x,float*y,float *p1)int i, j, k;float *w;w=new floatm;if(w!=NULL)/利用最小二乘法求解double a5050 = 0;double t;for (i = 0; i = m; i+)for (j = 0; j = m; j+)for (k = 0; k

14、number; k+)aij += pow(xk, i + j);for (k = 0; k number; k+)aij += yk*pow(xk, i);for (k = 0; k = m - 1; k+)for (i = k + 1; i = m; i+)t = -aik / akk;for (j = k + 1; j = 0; i-)for (j = i + 1; j = m; j+)aim + 1 -= aij * ajm + 1;aim + 1 /= aii;cout y= a0m + 1;for (i = 1; i 0)cout +;cout aim + 1 ;for (int

15、j = 0; j i; j+)cout *x;for(int i=0;im;i+)wi=ai+1m+1;DeviceContext context;/获得句柄HDC hdc = context.GetCurDC();HPEN HPen= CreatePen(PS_SOLID, 2, RGB(108, 0, 0);SelectObject( hdc,HPen );int z;for(i=0;inumber;i+)if(p10=xi)z=yi;MoveToEx(hdc, p10*5+100,768-(z*2+200), NULL);/从x值最小的点开始绘图for (int p=p10; p 100

16、; p+)doubley = a0m + 1;for ( int q= 1; q= m; q+)y+= aqm + 1 * pow(float) p,q);/TextOut(hdc, p+ 100,768-( y+100), *,1);LineTo(hdc, p*5+100,768-(y*2+200);cout endl;deletew;DeleteObject;elsecouterrorendl;void solve1(int m, int number,float *x,float*y,float*p2)/绘制对比曲线int i, j, k;float *w;w=new floatm;if

17、(w!=NULL)double a5050 = 0;double t;for (i = 0; i = m; i+)for (j = 0; j = m; j+)for (k = 0; k number; k+)aij += pow(xk, i + j);for (k = 0; k number; k+)aij += yk*pow(xk, i);for (k = 0; k = m - 1; k+)for (i = k + 1; i = m; i+)t = -aik / akk;for (j = k + 1; j = 0; i-)for (j = i + 1; j = m; j+)aim + 1 -

18、= aij * ajm + 1;aim + 1 /= aii;cout y= a0m + 1;for (i = 1; i 0)cout +;cout aim + 1 ;for (int j = 0; j i; j+)cout *x;for(int i=0;im;i+)wi=ai+1m+1;DeviceContext context;HDC hdc = context.GetCurDC();HPEN HPen= CreatePen(PS_SOLID, 2, RGB(0,105, 105);SelectObject( hdc,HPen );int z;for(i=0;inumber;i+)if(p

19、20=xi)z=yi;MoveToEx(hdc, p20*5+100,768-(z*2+200), NULL);for (int p=p20; p 100; p+)doubley = a0m + 1;for ( int q= 1; q= m; q+)y+= aqm + 1 * pow(float) p,q);/TextOut(hdc, p+ 100,768-( y+100), *,1);LineTo(hdc, p*5+100,768-(y*2+200);cout endl;deletew;DeleteObject;elsecouterrorendl;int _tmain(int argc, _

20、TCHAR* argv) for(;)int number, m;cout 请输入w最高次数 m;cout 请输入点的个数 number;srand(unsigned)time(NULL);float *x,*y,*p1;POINT *point;x=new float number;y=new float number;p1=new floatnumber;point=new POINTnumber;if(x!=NULL)/判断内存是否申请成功if(y!=NULL)if(point!=NULL)for (int i = 0; i number; i+)xi = rand() % 100; p

21、1i=xi;yi =100*sin(0.1*xi) + (rand() % 100) * 0.3;/随机数的产生/cout xi endl;/cout yi endl;for(int j=0;jnumber-1;j+)/找出x值最小的点for(int i=0;ip1i+1)int temp=p1i+1;p1i+1=p1i;p1i=temp;for(int i=0;inumber;i+)pointi.x=xi;pointi.x=yi;ofstream file (samp.text,ios_base:out);/记录带噪声的点的集合file.write(reinterpret_cast(&poi

22、nt),sizeof(point);DeviceContext dc;HDC hdc = dc.GetCurDC();HPEN HPen1= CreatePen(PS_SOLID, 2, RGB(0,0,0);SelectObject( hdc,HPen1 );MoveToEx(hdc, x0+100,768-(y0), NULL);for (int i = 0; i number; i+)TextOut(hdc, xi*5+100,768-(yi*2+200),*,2);solve(m, number,x,y,p1);deletex;/释放内存deletey; DeleteObject;/删

23、除画笔int m1;cout 请输入w最高次数 m1;srand(unsigned)time(NULL);float *x1,*y1,*p2;POINT *point1;x1=new float number;y1=new float number;p2=new float number;point1=new POINTnumber;for (int i = 0; i number; i+)x1i = rand() % 100;p2i=x1i;y1i =100*sin(0.1*xi) + (rand() % 100) * 0.3;/随机数的产生/cout xi endl;/cout yi en

24、dl;for(int j=0;jnumber-1;j+)for(int i=0;ip2i+1)int temp=p2i+1;p2i+1=p2i;p2i=temp;for(int i=0;inumber;i+)point1i.x=x1i;point1i.x=y1i;solve1(m1, number,x1,y1,p2);DeviceContext dc1;HDC hdc1= dc1.GetCurDC();HPEN HPen2= CreatePen(PS_SOLID, 1, RGB(0,105,0);SelectObject( hdc1,HPen2);MoveToEx(hdc, x10+100,7

25、68-(y10), NULL);for (int i = 0; i number; i+)TextOut(hdc, x1i*5+100,768-(y1i*2+200),*,2);deletex1;deletey1; DeleteObject;system(pause);elsecouterrorendl;elsecouterrorendl;else couterrorendl;return 0; 总 结这是我的第二次课程设计课,过程中也收获了很多,不管是态度还是能力,其实都是一种锻炼。说的更大一点,大学本身即是一门课,对待每一件事的态度都很重要。 C+之于我,其实很神奇,就像是一个入口,感受一

26、个全新的世界,用自己写的代码,去和机器交流,哪怕它并不是最优的,或许代码本身的可读性也不是很强,也并没有多么好的用户体验,但是真的,它是一种语言,怎么去把自己的想法,用更为清晰的另一种语言去表达,输出给别人使用。在第二个程序中体现,应该写一个类的,的确应该多加锻炼。我的性格的确不是特别沉稳的那一型,但是我要调试程序。 一个学期的C+课,也是一个成长的过程。在整个过程中,我和陈老师已经是第二次接触了,但是我感觉陈老师是很耐心也很细致的注重我每一步目的和意义。刘老师很希望大家可以扩展性思考,而花老师帮助了大家很多,大家也十分感谢他在学习这门课的过程中,始终一如既往的关怀我们、帮助我们解决一个个的问

27、题。我性格其实比较热情的也比较喜欢被鼓励的,其实我也是很喜欢什么事情都通过自己的努力去解决的。所以我喜欢这种给我一个开始,自己去想方向的过程。 通过这次的课程设计,让我们真正将课堂上学到的知识运用到实践中来,也让我们认识到自身的很多不足,设计程序的思路也有待提高,不仅要会解决问题,更要会用最少的资源,最高的效率来解决问题,更应开拓我们的思路,勤学好问,这固然只是一方面,更多的是,要学会自己怎么解决问题,思路只是一方面,很多事情其实不复杂,或许是因为事情多而缺乏这样一种信心,但是好在仍然花了很多心思把一步一步分析出来了,还是有些懊悔的,应该做的更好的。 我的课程设计结束了,但是或许对我来说,只要有兴趣,暑假应该会继续学习,所以并没有感觉到哪里结束了,反而是哪里开始了。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁