实验报告模板_第1页
实验报告模板_第2页
实验报告模板_第3页
实验报告模板_第4页
实验报告模板_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图像分析与计算机视觉实践报告课题: 专业: 班级: 姓名: 1、 实验目的 了解图像平移旋转和缩放的原理,通过Visual C+实现图像的平移旋转和缩放。2、 实验理论说明 图像平移: 设(X0,Y0)是原图像的一点,图像的水平平移量为Tx,垂直平移量为Ty,平移后的坐标为(X1,Y1),平移后的坐标变为,用矩阵表示为:。 图像缩放: 图像缩放是指图像的大小按照指定的比率放大或缩小。假设图像x轴方向的缩放比率Sx,y轴方向的缩放比率Sy,相应的变换表达式为: 图像旋转: 旋转一般是指将图像围绕某一指定点旋转一定的角度。 设原图像的坐标为P0(X0,Y0),绕原点逆时针旋转角度到点P1(X1,Y

2、1),旋转公式为:。3、 实验主要程序平移代码:void CImageProcessingView:OnJhbhPy() if(numPicture=0) AfxMessageBox(载入图片后才能空间平移!,MB_OK,0);return;/定义采样对话框也是用来空间变换平移的坐标CImagePYDlg dlg; if( dlg.DoModal()=IDOK ) /显示对话框/采样坐标最初为图片的自身像素if( dlg.m_xPYm_nWidth | dlg.m_yPYm_nHeight ) AfxMessageBox(图片平移不能为超过原图长宽!,MB_OK,0);return;AfxMe

3、ssageBox(图片空间变换-平移!,MB_OK,0);/打开临时的图片 读写文件FILE *fpo = fopen(BmpName,rb);FILE *fpw = fopen(BmpNameLin,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_pImage,m_nIm

4、age,1,fpo);unsigned char *ImageSize; ImageSize=new unsigned charm_nImage; /new和delete有效的进行动态内存的分配和释放int Place; /建立临时坐标 记录起始坐标(0,0)平移过来的位置int m_pImagePlace; /原始图像平移为(0,0) 图像把它平移到Place位置unsigned char black; /填充黑色=0 Place=dlg.m_yPY*m_nWidth*3; /前m_yPY行都要填充为黑色 black=0; /颜色为黑色m_pImagePlace=0; /图像处事位置为(0,

5、0),把该点像素平移过去 int countWidth=0; /记录每行的像素个数,满行时变回0int number=0; /数字记录使用的像素行数,平移时使用for(int i=0 ; im_nImage ; i+ )/*如果每行的像素填满时清为0*/if(countWidth=m_nWidth*3) countWidth=0;/*第一部分:到平移后像素位置前面的所有像素点赋值为黑色*/if(i=Place & countWidth=Place & countWidth=dlg.m_xPY*3)ImageSizei=m_pImagem_pImagePlace; m_pImagePlace+;

6、countWidth+;if(countWidth=m_nWidth*3)number+;m_pImagePlace=number*m_nWidth*3;fwrite(ImageSize,m_nImage,1,fpw); fclose(fpo);fclose(fpw);numPicture = 2;level=200; /200表示几何变换Invalidate();旋转代码:void CImageProcessingView:OnJhbhTxxz() if(numPicture=0) AfxMessageBox(载入图片后才能空间旋转!,MB_OK,0);return;/定义对话框并调用对话框

7、CImageXZDlg dlg; if( dlg.DoModal()=IDOK ) /显示对话框AfxMessageBox(图片空间变换-旋转图像!,MB_OK,0);/读写文件FILE *fpo = fopen(BmpName,rb);FILE *fpw = fopen(BmpNameLin,wb+);fread(&bfh,sizeof(BITMAPFILEHEADER),1,fpo);fread(&bih,sizeof(BITMAPINFOHEADER),1,fpo);fwrite(&bfh,sizeof(BITMAPFILEHEADER),1,fpw);fwrite(&bih,sizeo

8、f(BITMAPINFOHEADER),1,fpw);fread(m_pImage,m_nImage,1,fpo);/*new和delete有效的进行动态内存的分配和释放*/unsigned char *ImageSize; ImageSize=new unsigned charm_nImage; int Place; /记录图像每行的位置,便于图像旋转/*定义PA=3.14时使用的方法是arcsin(1.0/2)*6即为*/double PA;PA=asin(0.5)*6;/*把输入的0-360的正整数度数转换为角度,30度=/6*/double degree; degree=PA*dlg.

9、m_xzds/180; /调用dlg.m_xzds(旋转度数)/对应的二维矩阵 注意图像矩阵从左下角开始处理 它最终要转换成一维存储int X,Y; /图像变换前通过一维矩阵转换为二维int XPlace,YPlace;/输出转换为的角度CString str;str.Format(转换后的角度=%f,degree);AfxMessageBox(str);/图像旋转处理for(int i=0 ; i=0 & XPlace=0 & YPlace=m_nHeight) )Place=YPlace*m_nWidth*3+XPlace*3;/在图像范围内赋值为该像素if(Place+2m_nImage

10、) ImageSizei=m_pImagePlace;i+;ImageSizei=m_pImagePlace+1;i+;ImageSizei=m_pImagePlace+2;/否则赋值为黑色else ImageSizei=0; i+;ImageSizei=0;i+;ImageSizei=0;/否则赋值为黑色elseImageSizei=0;i+;ImageSizei=0;i+;ImageSizei=0;fwrite(ImageSize,m_nImage,1,fpw); fclose(fpo);fclose(fpw);numPicture = 2;level=200; /几何变换 Invalid

11、ate();缩放代码:void CImageProcessingView:OnJhbhSf() if(numPicture=0) AfxMessageBox(载入图片后才能几何缩放图像!,MB_OK,0);return;CImageSFDlg dlg; /定义缩放对话框if( dlg.DoModal()=IDOK )/采样坐标最初为图片的自身像素 m_sfbs(缩放倍数)if( dlg.m_sfbs=0 ) AfxMessageBox(输入图片缩放倍数不能为0!,MB_OK,0);return;FILE *fpo = fopen(BmpName,rb);FILE *fpw = fopen(Bm

12、pNameLin,wb+);fread(&bfh,sizeof(BITMAPFILEHEADER),1,fpo);fread(&bih,sizeof(BITMAPINFOHEADER),1,fpo);/*先求缩放后的长宽*/int sfWidth,sfHeight; /缩放后的长宽int sfSize; /缩放后的图像大小sfWidth=(int)(m_nWidth*(dlg.m_sfbs*1.0)/100); /24位图像RGB必须是3的倍数 循环中读取时为R G BsfHeight=(int)(m_nHeight*(dlg.m_sfbs*1.0)/100);int number; /记录每

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

14、f; /缩放(sf)bfhsf=bfh;bihsf=bih;bfhsf.bfSize=sfSize+54;bihsf.biWidth=sfWidth;bihsf.biHeight=sfHeight;/显示部分m_nDrawWidth650显示原图,否则显示flagSF=1; /图像缩放为1标识变量m_nDrawWidthSF=sfWidth;m_nDrawHeightSF=sfHeight;fwrite(&bfhsf,sizeof(BITMAPFILEHEADER),1,fpw);fwrite(&bihsf,sizeof(BITMAPINFOHEADER),1,fpw);fread(m_pIm

15、age,m_nImage,1,fpo);unsigned char red,green,blue;unsigned char other=0; /补码00H=0int placeX; /记录在原图中的第几行的位置int placeY; /记录在原图中的位置(x,y)int placeBH; /记录变换后在变换图中的位置/*new和delete有效的进行动态内存的分配和释放*/unsigned char *ImageSize; ImageSize=new unsigned charsfSize; /*读取文件像素信息 缩放注意:1.找最近灰度 2.四舍五入法(算法+0.5)*/for(int i

16、=0; isfHeight ; i+ ) /行placeX=(int)(i/(dlg.m_sfbs*1.0/100)+0.5)*bih.biWidth*3;for(int j=0; jsfWidth ; j+ ) /列red=green=blue=0;/放大倍数为(dlg.m_sfbs*1.0/100)placeY=placeX+(int)(j/(dlg.m_sfbs*1.0/100)+0.5)*3; /重点是:number*i补充00H,如果是numer图像会被切成2块placeBH=(i*sfWidth*3+number*i)+j*3; if(placeY+2m_nImage)ImageSizeplaceBH=m_pImageplaceY;I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论