学习OpenCV范例(十六)——重映射和仿射变换

本文介绍了OpenCV中重映射和仿射变换的原理及应用,通过实例展示了如何使用remap、getAffineTransform、getRotationMatrix2D和warpAffine函数实现图像的翻转、缩放、旋转和平移。代码实现包括两个窗口,分别演示了重映射和仿射变换的效果,包括上下左右颠倒、缩放和旋转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重映射在图像处理中主要的功能为:将一个图像中一个位置的像素放置到另一个图像指定位置的过程,可以根据自己设定的函数将图像进行变换,较常见的功能有关于x轴翻转,关于y轴翻转,关于x、y轴翻转;仿射变换在图像处理中的主要功能为:对图像进行缩放、旋转、平移、扭曲等。

1、原理

从下面三个链接可以详细的了解到重映射和仿射变换的原理

重映射:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/remap/remap.html#remap

仿射变换:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html#warp-affine

学习OpenCV:http://download.csdn.net/detail/chenjiazhou12/7083295

2、代码实现

程序的功能是:生成两个窗口分别显示重映射的结果和仿射变换的结果

重映射窗口上建立了一个滑动条

0表示:显示原图

1表示:图像宽高缩小一半,并显示在中间

2表示:图像上下颠倒

3表示:图像左右颠倒

4表示:同时执行上下和左右的颠倒

仿射变换窗口建立两个滑动条,一个为缩放功能,一个为旋转功能

旋转的角度为-180—180

缩放因子为:0.1-1.0

#include "stdafx.h"

 #include "opencv2/highgui/highgui.hpp"
 #include "opencv2/imgproc/imgproc.hpp"
 #include <iostream>
 #include <stdio.h>

 using namespace cv;


 /// Global variables
 Mat src;
 Mat warp_dst;
 const char* remaptrackbarname="remapvalue";
 const char* warprotatetrackbarname="warprotatevalue";
 const char* warpscaletrackbarname="warpscalevalue";
 const char* remap_window = "Remap demo";
 const char* warprotate_window="warprotate demo";
 const int remapmaxcount=4,warprotatemaxcount=360,warpscalemaxcount=10;
 int remapvalue,warprotatevalue=180, warpscalevalue=10;

 /// Function Headers
 void update_map( void );
 void remapcontrol(int,void*);
 void warprotatecontrol(int,void*);
 void warpaffinecontrol();

 /**
 * @function main
 */
 int main( int argc, char** argv )
 {
   /// Load the image
   src = imread( "scenery.jpg", 1 );

  /// Create dst, map_x and map_y with the same size as src:


  /// Create window
  namedWindow( remap_window, CV_WINDOW_AUTOSIZE );
  namedWindow(warprotate_window,CV_WINDOW_AUTOSIZE);
  createTrackbar(remaptrackbarname,remap_window,&remapvalue,remapmaxcount,remapcontrol);
  createTrackbar(warprotatetrackbarname,warprotate_window,&warprotatevalue,warprotatemaxcount,warprotatecontrol);
  createTrackbar(warpscaletrackbarname,warprotate_window,&warpscalevalue,warpscalemaxcount,warprotatecontrol); 
  remapcontrol(0,0);
  warpaffinecontrol();
  warprotatecon
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值