[终稿]实验4 图像几何变换—哈哈镜制作.doc

[终稿]实验4 图像几何变换—哈哈镜制作.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[终稿]实验4 图像几何变换—哈哈镜制作

实验4 图像几何变换—哈哈镜制作 一. 实验目的 熟悉图像的基本格式和数据结构。掌握图像几何变换的原理。 二.实验原理 图像平移 将图像中所有的点都按照指定的平移量水平、垂直移动。设(x0, y0)是原图像上的一点,图像水平平移量为tx,垂直平移量为ty,则平移后点(x0, y0)的坐标变为(x1, y1)。 (x0, y0)与(x1, y1)之间的关系为: (1) 以矩阵的形式表示为: (2) 它的逆变换: (3) 平移后的图像中每个像素的颜色是由原图像中的对应点颜色确定的。图像平移处理流程如图1所示。 图像旋转 通常是以图像的中心为圆心旋转,按顺时针方向旋转,如图2所示。 旋转前: (4) 旋转a角度后: (5) 以矩阵的形式表示为: rr r r a b (x0, y0) (x1, y1) yⅡ xⅡ O 图2 旋转示意图 (6) (6)式中,坐标系是以图像的中心为原点,向右为x轴正方向,向上为y轴正方向。它和以图像左上角为原点,向右为x轴正方向,向下为y轴正方向的坐标系之间的转换关系如图3所示。 (x (x, y) yⅡ xⅡ OⅡ xⅠ yⅠ OⅠ 图3 两种坐标系间的转换关系图 设图像的宽度为w,高度为h,容易得到: (7) 逆变换为: (8) 有了以上公式,可以把变换分成三步: 第一步,将坐标系Ⅰ变成Ⅱ; 第二步,将该点顺时针旋转a角度; 第三步,将坐标系Ⅱ变回Ⅰ。 这样,我们就得到了变换矩阵,它是上面三个矩阵的级联。那么对于新图像中的每一点,就可以根据对应原图中的点,得到它的灰度。如果超出原图范围,则填成白色。要注意的是,由于有浮点运算,计算出来点的坐标可能不是整数,采用取整处理或插值来处理。 图像缩放 假设x轴放大因子为c, y轴放大因子为d,缩放的变换矩阵为: (9) 实验步骤 哈哈镜的制作程序实现伪代码如下: 哈哈镜程序框架 #include stdio.h #include cv.h #include highgui.h #include math.h #define DOWNRESIZE 0 // 缩小 #define UPRESIZE 1 // 放大 #define HORAO 2 // 水平外凹 #define HORTU 3 // 水平外凸 #define LADDER 4 // 梯形变形 #define TRIANGLE 5 // 三角形变形 #define SSHAPE 6 // S形变形 #define WAVESHAPE 7 // 波浪形变形 #define RANGE 100 // 水平外凹或外凸的幅度 #define PI 3.1415926 // 哈哈镜制作 int main( int argc, char** argv ) { IplImage* pImg; //声明IplImage指针 IplImage* pImg1; //声明IplImage指针 int i,j; int method = 0; CvSize size; double tmp; method = DOWNRESIZE; //method = HORAO; //载入图像 pImg = cvLoadImage( ./1.bmp, 0); cvNamedWindow( Image, 1 );//创建窗口 cvShowImage( Image, pImg );//显示图像 printf(imageSize: %d height: %d, width: %d, nChannels: %d\n, pImg-imageSize, pImg-height, pImg-width, pImg-nChannels); switch(method) { // 图像缩小 case DOWNRESIZE: size = cvGetSize(pImg); size.width = (size.width3)2; // 在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。 size.height = size.height1; pImg1 = cvCreateImage( size, IPL_DEPTH_8U, 1); printf(imageSize: %d height: %d, width: %d, nChannels: %d\n, pImg1-imageSize, pImg1-height, pImg1-width, pImg1-nChannels); for

文档评论(0)

beoes + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档