试验报告模板.docx

上传人:scccc 文档编号:12741644 上传时间:2021-12-05 格式:DOCX 页数:28 大小:288KB
返回 下载 相关 举报
试验报告模板.docx_第1页
第1页 / 共28页
试验报告模板.docx_第2页
第2页 / 共28页
试验报告模板.docx_第3页
第3页 / 共28页
试验报告模板.docx_第4页
第4页 / 共28页
试验报告模板.docx_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《试验报告模板.docx》由会员分享,可在线阅读,更多相关《试验报告模板.docx(28页珍藏版)》请在三一文库上搜索。

1、实验报告模板图像分析与计算机视觉实践报告课题:专业:班级:姓名:、实验目的了解图像平移旋转和缩放的原理,通过Visual C+实现图像的平移旋转和缩放。、实验理论说明图像平移:设(X0 , Y0)是原图像的一点,图像的水平平移量为Tx,垂直平移量为Ty,平移后的坐标为(X1 , Y1 ),平移后的坐标变为1 0X1 X0 Tx,用矩阵表示为:X1 Y1 1 X0 Y0 1 0 1Y1 Y0 TyTx Ty图像缩放:图像缩放是指图像的大小按照指定的比率放大或缩小。假设图像 void ClmageProcess in gView:O nJhbhPy()x轴方向的缩放比率Sx,y轴方向的缩放比率Sy

2、相应的变换表达式为:X1 Y1 1 X0 Y0Sx0010Sy0X0* Sx Y0* Sy1001图像旋转:旋转一般是指将图像围绕某一指定点旋转一定的角度。设原图像的坐标为P0 (X0 , Y0),绕原点逆时针旋转角度B到点P1(X1, Y1),旋转公式为:X1 Y1 1 X0 Y0cos1 sin0sincos0三、实验主要程序平移代码:if(nu mPicture=O) AfxMessageBox("载入图片后才能空间平 移!",MB_OK,O);retur n;/定义采样对话框也是用来空间变换平移的坐 标CImageP YDIg dlg;if( dlg.DoModal

3、()=IDOK ) / 显示对话框采样坐标最初为图片的自身像素if(dlg.m_xP Y>m_nWidth|dlg.m_yP Y> m_nHeight ) AfxMessageBox("图片平移不能为超过 原图长宽!",MB_OK,O);return;AfxMessageBox("图片空间变换-平 移!",MB_OK,0);打开临时的图片读写文件FILE *fpo = fope n( BmpName,"rb");FILE *fpw = fope n( BmpNameLi n,"wb+");fread(&

4、amp;bfh,sizeof(BITMAPFILEHEADER),1 ,fpo);fread(&bih,sizeof(BITMAPINFOHEADER),1 ,fpo);fwrite(&bfh,sizeof(BITMAPFILEHEADER),1,fpw);fwrite(&bih,sizeof(BITMAPINFOHEADER),1,fpw);fread(m_plmage,m_nlmage,1,fpo);un sig ned char *lmageSize;ImageSize=newun sig necharm_nlmage;/new 和 delete 有效的进行动态内

5、存的分配和释放int Place;/建立临时坐标记录起始坐标(0,0)干移过来的位置int m_plmagePlace;/原始图像平移为(0,0)图像把它平移到Place位置un sig ned char black;/填充黑色='0'Place=dlg.m_yP Y*m_nWidth*3;/前m_yPY行都要填充为黑色black=0;/颜色为黑色m_pImagePlace=0;图像处事位置为(0,0),把该点像素平移过去int countWidth=0;/记录每行的像素个数,满行时变回0int number=0;/数字记录使用的像素行数,平移时使用for(i nt i=0 ;

6、 i<m_nImage ; i+ )/*如果每行的像素填满时清为0*/if(cou ntWidth=m_nWidth*3) cou ntWidth=0;/*第一部分:到平移后像素位置前面的所有像素点赋值为黑色*/if(ivPlace) lmageSizei=black;/赋值为黑con ti nue; /*第二部分:平移区域的左边部分赋值为黑色*/乘3/赋值为黑elseif(i>=Place&&ImageSizei=black;cou ntWidth<dlg.m_xP Y*3) /RGBcou ntWidth+; con ti nue; /*第三部分:图像像素

7、平移区域*/else&&if(i>=Placecou ntWidth>=dlg.m_xP Y*3)lmageSizei=m_plmagem_plmagePlace; m_plmagePlace+;cou ntWidth+;if(cou ntWidth=m_nWidth*3)nu mber+;m_plmagePlace=n umber*m _n Width*3;fwrite(ImageSize,m_nImage,1,fpw); fclose(fpo);fclose(fpw);nu mPicture = 2;level=200;200表示几何变换In validate(

8、);旋转代码:void ClmageProcessi ngView:O nJhbhTxxz()if(n umPicture=O) AfxMessageBox("载入图片后才能空间旋 转!",MB_OK,0);return;/定义对话框并调用对话框ClmageXZDIg dlg;if( dlg.DoModal()=IDOK ) / 显示对话框AfxMessageBox("图 片空间变换-旋转图 像!",MB_OK,0);读写文件FILE *fpo = fope n( BmpName,"rb");FILE *fpw = fope n( B

9、mpNameLi n,"wb+");fread(&bfh,sizeof(BITMAPFILEHEADER),1,fpo);fread(&bih,sizeof(BITMAPINFOHEADER),1 ,fpo);fwrite(&bfh,sizeof(BITMAPFILEHEADER),1,fpw);fwrite(&bih,sizeof(BITMAPINFOHEADER),1,fpw);fread(m_plmage,m_nlmage,1,fpo);/*new和delete有效的进行动态内存的分配 和释放*/un sig ned char *lma

10、geSize;ImageSize=new un sig ned charm_nlmage; int Place;/记录图像每行的位置便于图像旋转/*定义PA=3.14时使用的方法是 arcsin(1.0/2)*6 即为 n */double PA;PA=as in (0.5)*6;/*把输入的0-360的正整数度数转换为角 度,30 度=n /6*/double degree;degree=PA*dlg.m_xzds/180;/ 调用dlg.m_xzds(旋转度数)/对应的二维矩阵注意图像矩阵从左下角开始处理它最终要转换成一维存储int X,Y;/图像变换前通过一维矩阵转换为二维int XPl

11、ace, YPlace;输出转换为的角度CStri ng str;str.Format("转换后的角度=%f",degree);AfxMessageBox(str);图像旋转处理for(i nt i=0 ; i<m_nlmage ; i+ )原图:一维矩阵转换为二维矩阵X=(i/3)%m_nWidth;Y=(i/3)/m_nWidth;/ 注意错误:X=i/m_nHeight Y=i%m_nWidth;只输出最后 1/3/ 图像 旋转为:a(x,y)=x*cos-y*sin b(x,y)=x*s in+y*cosXPlace=(i nt)(X*cos(degree)-

12、Y*si n(degree);Y Place=(i nt)(X*si n(degree)+Y*cos(degree);/在转换为一维图想输出if( (XPIace>=0 && XPIace<=m_nWidth)&& (Y Place>=0 && Y Place<=m _nH eight)Place=YPIace*m_nWidth*3+XPIace*3;/在图像范围内赋值为该像素if(Place+2<m_nlmage)lmageSizei=m_plmagePlace; i+; lmageSizei=m_plmagePl

13、ace+1; i+;ImageSizei=m_pImagePlace+2; 否则赋值为黑色elseImageSizei=0;i+;lmageSizei=O;i+;lmageSizei=O;/否则赋值为黑色elselmageSizei=O; i+;lmageSizei=O;i+; lmageSizei=O;fwrite(lmageSize,m_nlmage,1,fpw); fclose(fpo);fclose(fpw);nu mPicture = 2;level=200;几何变换In validate。;缩放代码:void CImageProcessi ngView:O nJhbhSf()if(

14、nu mPicture=O) AfxMessageBox("载入图片后才能几何缩放图像!",MB_OK,0);return;ClmageSFDIg dig;/定义缩放对话框if( dlg.DoModal()=IDOK)/采样坐标最初为图片的自身像素m_sfbs(缩放倍数)if( dlg.m_sfbs=0 ) AfxMessageBox("输入图片缩放倍数不 能为 0!",MB_OK,0);return;FILE *fpo = fope n( BmpName,"rb");FILE *fpw = fope n( BmpNameLi n,&

15、quot;wb+");fread(&bfh,sizeof(BITMAPFILEHEADER),1 ,fpo);fread(&bih,sizeof(BITMAPINFOHEADER),1,fpo);/*先求缩放后的长宽*/intsfWidth,sfHeigh t;缩放后的长宽intsfSize;缩放后的图像大小sfWidth=(i nt)(m_nWidth*(dlg.m_sfbs*1.0)/100);/24位图像RGB必须是3的倍数 循环中读取时为R G BsfHeight=(i nt)(m_nHeight*(dlg.m_sfbs*1.0)/100);intnu mbe

16、r;记录每行多余的图像素数个数重点:图像的每行像素都必须是4的倍数:1*1的图像为r g b 00Hif(sfWidth*3%4!=0) n umber=(4-sfWidth*3%4);sfSize=(sfWidth*3+(4-sfWidth*3%4)*sfHeight;else n umber=O;sfSize=sfWidth*sfHeight*3;注意:假如最后一行像素不足,我默认处理 为完整的一行,不足补00H总之处理后的图像总是m*n且为4倍数 每行都完整存在/*更改文件头信息定义临时文件头结构变 量*/BITMAPFILEHEADER bfhsf; BITMAPINFOHEADERb

17、ihsf;缩放(sf)bfhsf=bfh;bihsf=bih;bfhsf.bfSize=sfSize+54; bihsf.biWidth=sfWidth; bihsf.biHeight=sfHeight;显示部分m_nDrawWidth<650显示原图,否则显示flagSF=1;/ 图像缩放为1标识变量m_nDrawWidthSF=sfWidth;m_n DrawHeightSF=sfHeigh t;fwrite(&bfhsf,sizeof(BITMAPFILEHEADER),1,fpw);fwrite(&bihsf,sizeof(BITMAPINFOHEADER),1,

18、fpw);fread(m_plmage,m_nlmage,1,fpo);un sig ned char red,gree n,blue;un sig nedcharother=0;补码 00H='0'intplaceX;记录在原图中的第几行的位置int placeY;/ 记录在原图中的位置(x,y)intplaceBH;记录变换后在变换图中的位置/*new和delete有效的进行动态内存的分配 和释放*/un sig ned char *lmageSize;ImageSize=new un sig ned charsfSize;/*读取文件像素信息缩放注意:1.找最近灰度2.四

19、舍五入法(算法+0.5)*/for(i nt i=0; i<sfHeight ;i+行placeX=(i nt)(i/(dlg.m_sfbs*1.0/100)+0.5)*bih. biWidth*3;for(i ntj=0; j<sfWidth ;j+列 red=gree n=blue=0;放大倍数为(dlg.m_sfbs*1.0/100)place Y=placeX+( in t)(j/(dlg.m_sfbs*1.0/100)+0 5)*3;/重点是:number*i补充OOH,如果是 numer图像会被切成2块placeBH=(i*sfWidth*3+number*i)+j*3

20、;if(place Y+2<m_nlmage)lmageSizeplaceBH=m_plmageplace Y;lmageSizeplaceBH+1=m_plmageplace Y+1JImageSizeplaceBH+2=m_pImageplace Y+2JelseImageSizeplaceBH=0;ImageSizeplaceBH+1=0;ImageSizeplaceBH+2=0;fwrite(lmageSize,sfSize,1,fpw);fclose(fpo);fclose(fpw);nu mPicture = 2;level=200;In validate。;四、实验结果平移:平移后:缩放:

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1