- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 跨越架搭设施工合同.docx
- 2023年二季度医疗质量管理委员会会议记录.docx VIP
- 北师大版(2019)必修第一册 Sports and Fitness Writing Workshop A True Story 课件(共23张PPT)).pptx VIP
- 6MW屋顶分布式光伏电站项目可研报告.docx
- 2024年学校食堂食品安全风险隐患排查整治记录表.docx
- 叶是光合作用的主要器官.ppt
- 活动一 影子变变变(课件)蒙沪版二年级上册综合实践活动.pptx
- 2024-2025学年初中综合实践活动九年级第二学期沪科版(贵州专用)教学设计合集.docx
- 统编版小学语文六年级上册质量检测卷.pdf
- 人民医院高额病例异常住院费用病例核查方案.docx
文档评论(0)