实验报告模板图像分析与计算机视觉实践报告课题:专业:班级:姓名:实验目的了解图像平移旋转和缩放的原理,通过VisualC++实现图像的平移旋转和缩放。实验理论说明图像平移:设(X0,Y0)是原图像的一点,图像的水平平移量为Tx,垂直平移量为Ty,平移后的坐标为(X1,Y1),平移后的坐标变为,用矩阵表示为:。图像缩放:图像缩放是指图像的大小按照指定的比率放大或缩小。假设图像x轴方向的缩放比率Sx,y轴方向的缩放比率Sy,相应的变换表达式为:图像旋转:旋转一般是指将图像围绕某一指定点旋转一定的角度。设原图像的坐标为P0(X0,Y0),绕原点逆时针旋转角度θ到点P1(X1,Y1),旋转公式为:。实验主要程序平移代码:voidCImageProcessingView::OnJhbhPy(){ if(numPicture==0){ AfxMessageBox("载入图片后才能空间平移!",MB_OK,0); return; } //定义采样对话框也是用来空间变换平移的坐标 CImagePYDlgdlg; if(()==IDOK)//显示对话框 { //采样坐标最初为图片的自身像素 if(>m_nWidth||>m_nHeight){ AfxMessageBox("图片平移不能为超过原图长宽!",MB_OK,0); return; } 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,sizeof(BITMAPINFOHEADER),1,fpw); fread(m_pImage,m_nImage,1,fpo); unsignedchar*ImageSize; ImageSize=newunsignedchar[m_nImage];//new和delete有效的进行动态内存的分配和释放 intPlace;//建立临时坐标记录起始坐标(0,0)平移过来的位置 intm_pImagePlace;//原始图像平移为(0,0)图像把它平移到Place位置 unsignedcharblack;//填充黑色='0' Place=*m_nWidth*3;//前m_yPY行都要填充为黑色 black=0;//颜色为黑色 m_pImagePlace=0;//图像处事位置为(0,0),把该点像素平移过去 intcountWidth=0;//记录每行的像素个数,满行时变回0 intnumber=0;//数字记录使用的像素行数,平移时使用 for(inti=0;i<m_nImage;i++) { /*如果每行的像素填满时清为0*/ if(countWidth==m_nWidth*3){ countWidth=0; } /*第一部分:到平移后像素位置前面的所有像素点赋值为黑色*/ if(i<Place){ ImageSize[i]=black;//赋值为黑色 continue; } /*第二部分:平移区域的左边部分赋值为黑色*/ elseif(i>=Place&&countWidth<*3){//RGB乘3 ImageSize[i]=black;//赋值为黑色 countWidth++; continue; } /*第三部分:图像像素平移区域*/ elseif(i>=Place&&countWidth>=*3) { ImageSize[i]=m_pImage[m_pImagePlace]; m_pImagePlace++; 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(); } }旋转代码:voidCImageProcessingView::OnJhbhTxxz(){ if(numPicture==0){ AfxMessageBox("载入图片后才能空间旋转!",MB_OK,0); return; } //定义对话框并调用对话框 CImageXZDlgdlg
实验报告模板模板 来自淘豆网m.daumloan.com转载请标明出处.