版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 实验4 图像几何变换哈哈镜制作一 实验目的熟悉图像的基本格式和数据结构。掌握图像几何变换的原理。二实验原理1. 图像平移将图像中所有的点都按照指定的平移量水平、垂直移动。设(x0, y0)是原图像上的一点,图像水平平移量为tx,垂直平移量为ty,则平移后点(x0, y0)的坐标变为(x1, y1)。(x0, y0)与(x1, y1)之间的关系为:(1)以矩阵的形式表示为:(2)它的逆变换:(3)平移后的图像中每个像素的颜色是由原图像中的对应点颜色确定的。图像平移处理流程如图1所示。2. 图像旋转通常是以图像的中心为圆心旋转,按顺时针方向旋转,如图2所示。旋转前:(4)旋转a角度后:(5)以矩
2、阵的形式表示为:rrab(x0, y0)(x1, y1)yxO图2 旋转示意图(6)(6)式中,坐标系是以图像的中心为原点,向右为x轴正方向,向上为y轴正方向。它和以图像左上角为原点,向右为x轴正方向,向下为y轴正方向的坐标系之间的转换关系如图3所示。(x, y)yxOxyO图3 两种坐标系间的转换关系图设图像的宽度为w,高度为h,容易得到:(7)逆变换为:(8)有了以上公式,可以把变换分成三步:第一步,将坐标系变成;第二步,将该点顺时针旋转a角度;第三步,将坐标系变回。这样,我们就得到了变换矩阵,它是上面三个矩阵的级联。那么对于新图像中的每一点,就可以根据对应原图中的点,得到它的灰度。如果超
3、出原图范围,则填成白色。要注意的是,由于有浮点运算,计算出来点的坐标可能不是整数,采用取整处理或插值来处理。3. 图像缩放假设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 / 水
4、平外凹#define HORTU 3 / 水平外凸#define LADDER 4 / 梯形变形#define TRIANGLE 5 / 三角形变形#define SSHAPE 6 / S形变形#define WAVESHAPE 7 / 波浪形变形#define RANGE 100 / 水平外凹或外凸的幅度/ 哈哈镜制作int main( int argc, char* argv ) IplImage* pImg; /声明IplImage指针 IplImage* pImg1; /声明IplImage指针 int i,j;int method = 0;CvSize size;double tmp
5、;method = DOWNRESIZE;/method = HORAO; /载入图像 pImg = cvLoadImage( "./1.bmp", 0); cvNamedWindow( "Image", 1 );/创建窗口 cvShowImage( "Image", pImg );/显示图像 printf("imageSize: %d height: %d, width: %d, nChannels: %dn", pImg->imageSize, pImg->height, pImg->widt
6、h, pImg->nChannels);switch(method)/ 图像缩小case DOWNRESIZE:size = cvGetSize(pImg);size.width = (size.width>>3)<<2; / 在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。size.height = size.height>>1;pImg1 = cvCreateImage( size, IPL_DEPTH_8U, 1);printf("imageSize: %d height: %d, width
7、: %d, nChannels: %dn", pImg1->imageSize, pImg1->height, pImg1->width, pImg1->nChannels);for(i=0;i<pImg1->height;i+)for(j=0;j<pImg1->width;j+)pImg1->imageDatai*pImg1->width+j = pImg->imageDatai*2*pImg->width+j*2;break;/ 图像放大case UPRESIZE:/* 添加代码 */break;/ 水平外凹
8、case HORAO:pImg1 = cvCreateImage( cvGetSize(pImg), IPL_DEPTH_8U, 1);printf("imageSize: %d height: %d, width: %d, nChannels: %dn", pImg1->imageSize, pImg1->height, pImg1->width, pImg1->nChannels);for(i=0;i<pImg1->height;i+)tmp = RANGE*sin(i*PI/pImg1->height);for(j=tmp;j
9、<pImg1->width-tmp;j+)pImg1->imageDatai*pImg1->width+j = pImg->imageDatai*pImg->width+(int)(j-tmp)*(pImg->width)/(pImg->width-2*tmp);break;/ 水平外凸case HORTU:/* 添加代码 */break;/ 梯形变形case LADDER:/* 添加代码 */break;/ 三角形变形case TRIANGLE:/* 添加代码 */break;/ S形变形case SSHAPE:/* 添加代码 */break;
10、/ 波浪形变形case WAVESHAPE:/* 添加代码 */break;default:printf("no method supportn");break; / 显示结果 cvNamedWindow( "Image1", 1 );/创建窗口 cvShowImage( "Image1", pImg1 );/显示图像 cvWaitKey(0); /等待按键 /销毁窗口 释放内存 cvDestroyWindow( "Image" );/销毁窗口 cvReleaseImage( &pImg ); /释放图像
11、cvDestroyWindow( "Image1" );/销毁窗口 cvReleaseImage( &pImg1 ); /释放图像 return 0;四 实验仪器1. 计算机;2. VC+程序;3. 移动式存储器(软盘、U盘等)。4. 记录用的笔、纸。五 实验报告内容1. 叙述实验过程;2. 提交实验的原始图像和结果图像。六 思考题1. 如果新图中有一点(x1, y1),按照公式Error! Reference source not found.得到的(x0, y0)不在原图中该怎么办?2. 编程实现基于零阶和一阶灰度插值法的图像放大技术,比较两种灰度内插方法的效果
12、。3. 编程实现图像放大、缩小、三角形、梯形、S形以及内凹和外凹等功能。#include"StdAfx.h"#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 TRI
13、ANGLE 5 / 三角形变形#define SSHAPE 6 / S形变形#define WAVESHAPE 7 / 波浪形变形#define RANGE 100 / 水平外凹或外凸的幅度/ 哈哈镜制作int main( int argc, char* argv ) IplImage* pImg; /声明IplImage指针 IplImage* pImg1; /声明IplImage指针 int i,j;int method = 5;CvSize size;double tmp; /载入图像 pImg = cvLoadImage( "Lena.jpg", 0); cvNam
14、edWindow( "Image", 1 );/创建窗口 cvShowImage( "Image", pImg );/显示图像 printf("imageSize: %d height: %d, width: %d, nChannels: %dn", pImg->imageSize, pImg->height, pImg->width, pImg->nChannels);switch(method)/ 图像缩小case DOWNRESIZE:size = cvGetSize(pImg);size.width =
15、 (size.width>>3)<<2; / 在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。size.height = size.height>>1;pImg1 = cvCreateImage( size, IPL_DEPTH_8U, 1);printf("imageSize: %d height: %d, width: %d, nChannels: %dn", pImg1->imageSize, pImg1->height, pImg1->width, pImg1->
16、nChannels);for(i=0;i<pImg1->height;i+)for(j=0;j<pImg1->width;j+)pImg1->imageDatai*pImg1->width+j = pImg->imageDatai*2*pImg->width+j*2;break;/ 图像放大case UPRESIZE:size = cvGetSize(pImg);size.width = (size.width<<3)>>2; / 在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。
17、size.height = size.height<<1;pImg1 = cvCreateImage( size, IPL_DEPTH_8U, 1);printf("imageSize: %d height: %d, width: %d, nChannels: %dn", pImg1->imageSize, pImg1->height, pImg1->width, pImg1->nChannels);for(i=0;i<pImg1->height;i+)for(j=0;j<pImg1->width;j+)pImg1
18、->imageDatai*pImg1->width+j = pImg->imageDatai/2*pImg->width+j/2;break;/ 水平外凹case HORAO:pImg1 = cvCreateImage( cvGetSize(pImg), IPL_DEPTH_8U, 1);printf("imageSize: %d height: %d, width: %d, nChannels: %dn", pImg1->imageSize, pImg1->height, pImg1->width, pImg1->nChan
19、nels);for(i=0;i<pImg1->height;i+)tmp = RANGE*sin(i*PI/pImg1->height);for(j=(int)tmp;j<pImg1->width-tmp;j+)pImg1->imageDatai*pImg1->width+j = pImg->imageDatai*pImg->width+(int)(j-tmp)*(pImg->width)/(pImg->width-2*tmp);break;/ 水平外凸case HORTU:pImg1 = cvCreateImage( cvGe
20、tSize(pImg), IPL_DEPTH_8U, 1);printf("imageSize: %d height: %d, width: %d, nChannels: %dn", pImg1->imageSize, pImg1->height, pImg1->width, pImg1->nChannels);for(i=0;i<pImg1->height;i+)tmp = RANGE+RANGE*sin(i*PI/pImg1->height+PI);for(j=(int)tmp;j<pImg1->width-tmp;
21、j+)pImg1->imageDatai*pImg1->width+j = pImg->imageDatai*pImg->width+(int)(j-tmp)*(pImg->width)/(pImg->width-2*tmp);break;/ 梯形变形case LADDER:pImg1 = cvCreateImage( cvGetSize(pImg), IPL_DEPTH_8U, 1);printf("imageSize: %d height: %d, width: %d, nChannels: %dn", pImg1->image
22、Size, pImg1->height, pImg1->width, pImg1->nChannels);for(i=0;i<pImg1->height;i+)tmp = i*0.3;for(j=(int)tmp;j<pImg1->width-tmp;j+)pImg1->imageDatai*pImg1->width+j = pImg->imageDatai*pImg->width+(int)(j-tmp)*(pImg->width)/(pImg->width-2*tmp);break;/ 三角形变形case TRIANGLE:pImg1 = cvCreateImage( cvGetSize(pImg), IPL_DEPTH_8U, 1);printf("imageSize: %d height: %d, width: %d,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区及乡镇卫生技术人员传染病防治知识培训试题及答案
- 食堂危险作业管控考核办法
- 正面舆情典型经验推广实施细则
- 排水管网工程施工组织设计
- 热射病试题和答案
- 健康管理师考试模拟试题(附答案)
- 小学六一儿童节文艺汇演活动方案
- 2026年安徽省委党校在职研究生招生考试(公共管理)历年参考题库附答案
- 印刷企业主要负责人运行操作安全操作规程
- 反思检讨书范文
- 公路施工专业监理工程师个人简历范文
- CJ/T 94-2005饮用净水水质标准
- 葡萄大棚转让合同协议
- 企业制度的重要性
- 《高效执行力培训课件》
- 肺动脉高压课件
- 亲子关系断绝协议书范文模板
- XX集团公司汇率风险管理实施细则
- 2024-2025学年初中信息技术(信息科技)七年级下册黔教版教学设计合集
- ISO TR 15608-2017-中英文版完整
- 法学概论(第七版) 课件全套 谷春德 第1-7章 我国社会主义法的基本理论 - 国际法
评论
0/150
提交评论