当前位置: 首页 > 编程日记 > 正文

listen函数的第二个参数_【图像处理】OpenCV系列十七 --- 几何图像变换函数详解(一)...

上一篇我们学习了仿射变换的warpAffine函数,知道了如何用这个函数对图像进行旋转、平移等操作,那么本节我们一起来学习一下与仿射变换相关的其他函数以及相关的几何图像变换。

一、convertMaps()函数

1、函数原型

void convertMaps(InputArray map1, InputArray map2, OutputArray dstmap1,  OutputArray dstmap2, int dstmap1type,  bool nninterpolation = false);

2、函数功能

将图片的变换映射从一种形式转换为另一种形式。

格式如下:

( (map1.type(), map2.type()) → (dstmap1.type(), dstmap2.type()) )

会支持下面的几种操作:

  • (CV_32FC1, CV_32FC1)→(CV_16SC2, CV_16UC1)

这是一种最常用的转换操作,将原图浮点映射转换为更为紧促和更快的顶点表示!第一个输出里面存储圆角坐标,第二个输出存储插值表中的索引(当函数的参数nninterpolation = false时创建);

  • (CV_32FC2)→(CV_16SC2, CV_16UC1)

与第一种类似,但是原图映射在一个2通道的矩阵中;

  • 反向转换,显然,重建的浮点映射与原图的浮点映射不会完全相同!

3、参数详解

  • 第一个参数,InputArray map1,第一个输入映射,一般它的类型为 CV_16SC2, CV_32FC1, or CV_32FC2;
  • 第二个参数,InputArray map2,第二个输入映射,一般它的类型为CV_16UC1, CV_32FC1,以及空的矩阵(none);
  • 第三个参数,OutputArray dstmap1,第一个输出映射,类型通过dstmap1type定义,尺寸与原图像一致;
  • 第四个参数,OutputArray dstmap2,第二个输出映射;
  • 第五个参数,int dstmap1type,第一个输出映射的类型应该为 CV_16SC2, CV_32FC1, or CV_32FC2;
  • 第六个参数,bool nninterpolation = false,插值的选择方式,默认选择为最近邻插值(INTER_NEAREST),否则将会使用更加复杂的插值方式!

二、getAffineTransform()函数

1、函数原型

Mat getAffineTransform( const Point2f src[],  const Point2f dst[] );Mat getAffineTransform( InputArray src,  InputArray dst );

2、函数功能

用三对相对应的点计算图像的仿射变换;该函数计算仿射变换的2x3矩阵。

具体公式如下:

b3b7e280cd4d5d7fb1df8c8dcfb56d48.png

仿射变换

其中:

3b377992548f2c7e259127727a8e46e4.png

仿射变换

3、参数详解

  • 第一个参数,const Point2f src[],原图像三角形在坐标系中的顶点坐标;
  • 第二个参数,const Point2f dst[],目标图像三角形在坐标系中的顶点坐标;
  • 返回值,返回一个2x3的仿射矩阵。

三、getPerspectiveTransform()函数

1、函数原型

Mat getPerspectiveTransform(const Point2f src[],  const Point2f dst[],  int solveMethod = DECOMP_LU);Mat getPerspectiveTransform(InputArray src,  InputArray dst,  int solveMethod = DECOMP_LU);

2、函数功能

用四对相对应的点计算图像的透视变换;

函数计算透视变换的3x3矩阵;

具体公式如下:

d05c54a69aa1032d6dfdd10fa5927c50.png

透视变换

其中:

a9ed321de77d5f15d524d78113668af9.png

透视变换

3、参数详解

  • 第一个参数,const Point2f src[],原图像四边形在坐标系中的顶点坐标;
  • 第二个参数,const Point2f dst[],目标图像四边形在坐标系中的顶点坐标;
  • 第三个参数,int solveMethod = DECOMP_LU,矩阵分解的类型,默认为DECOMP_LU(用最佳的枢轴单元进行高斯分解)
  • 返回值,返回3x3透视变换矩阵

关于第三个参数,矩阵分解的类型还有以下几种分解方式:

7cec4cdd84b7e0cbbc17b04b1849d521.png

矩阵分解的类型

四、getRectSubPix()函数

1、函数原型

void getRectSubPix(InputArray image,  Size patchSize, Point2f center,  OutputArray patch,  int patchType = -1);

2、函数功能

从原图像中提取提取一个感兴趣的矩形区域图像;

具体的公式如下:

321e68ee2a616b913e83ac8c3ad35bdd.png

getRectSubPix

其中使用双线性内插检索非整数坐标处的像素的值,多通道的图像对每个通道进行单独处理;图像可以是单通道图像,也可以是三通道图像;矩形的中心必须在图像内部,矩形的一部分可以在图像外部;

3、参数详解

  • 第一个参数,InputArray image,原图像,即输入的图像;
  • 第二个参数,Size patchSize,感兴趣区域的大小 ;
  • 第三个参数,Point2f center,从原图像中提取感兴趣区域中心的浮点坐标位置,这个中心坐标必须在原图像内部;
  • 第四个参数,OutputArray patch,输出感兴趣区域的图像,这个图像的大小为第二个参数patchSize,并且与原图像具有同样的通道数;
  • 第五个参数,int patchType = -1,感兴趣区域图像的深度,默认情况下与原图具有同样的深度。

五、getRotationMatrix2D()函数

1、函数原型

Mat getRotationMatrix2D(Point2f center,  double angle,  double scale);

2、函数功能

计算二维旋转的仿射矩阵;

具体的公式如下:

e74fe25f9e9955e091dc9da3f6f0de6e.png

仿射矩阵

其中,

697319f23b1ef94269c015254aa924ff.png

仿射矩阵

3、参数详解

  • 第一个参数,Point2f center,图像旋转的中心点的坐标;
  • 第二个参数,double angle,图像旋转的角度;
  • 第三个参数,double scale,图像缩放的比例因子;
  • 返回值,返回旋转之后的矩阵。

六、invertAffineTransform()函数

1、函数原型

void invertAffineTransform(InputArray M,  OutputArray iM);

2、函数功能

逆仿射变换,计算由2×3矩阵M表示的逆仿射变换,

具体的公式如下:

ab85a514345c7fa022fff7593ab137d2.png

逆仿射变换

输出是一个2×3的矩阵,与M具有相同的类型。

3、参数详解

  • 第一个参数,InputArray M,原来的仿射变换;
  • 第二个参数,OutputArray iM,逆仿射变换。

我是奕双,现在已经毕业将近两年了,从大学开始学编程,期间学习了C需要编程,C++需要编程,Win32编程,MFC编程,毕业之后进入一家图像处理相关领域的公司,掌握了用OpenCV对图像进行处理,如果大家对相关领域感兴趣的话,可以关注我,我这边会为大家进行解答哦!如果大家需要相关学习资料的话,可以私聊我哦!

相关文章:

flex java socket通信

引用:http://developer.51cto.com/art/201003/189791.htm Java socket通信如何进行相关问题的解答呢?还是需要我们不断的学习,在学习的过程中会遇到不少的问题。下面我们就从源代码中找到有关的问题解决方案。希望大家在以后的Javasocket通信使用中有所收…

编程珠玑:对DAO层的一点修改

由于以前的Domain对象都是不需要序列化的,所以为了操作数据库查询的方便,直接采用继承BaseDomain的方式来完成。这样在传递动态参数的时候,只需要把参数放到Map总,就可以很好的在ibatis配置文件(map.xx来直接获取值)中使用。 这样…

solr 下载 有dist目录的(6需要8)

http://archive.apache.org/dist/lucene/solr/ solr6 需要java8 转载于:https://www.cnblogs.com/hnqm/p/9367140.html

抛出一个nullpointerexception_Java 14 发布了,再也不怕 NullPointerException 了!

推荐阅读:Java程序员danni:就一个HashMap,居然能跟面试官扯上半个小时?​zhuanlan.zhihu.com2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载。在JDK 14中,共有16个新特性&#…

linux平台软件动态分析工具valgrind系列工具及其可视化

linux平台软件动态分析工具valgrind系列工具 Memcheck–内存检查工具Callgrind–函数调用分析工具Cachegrind–缓存命中分析工具Helgrind–线程分析工具Massif–内存堆栈分析工具 一、Valgrind 概述 Valgrind是一套Linux下,开放源代码(GPL V2&#xf…

codeviz安装使用全记录

安装过程 $ sudo apt-get install -y graphviz graphviz-dev graphviz-doc $ sudo apt-get install -y libgv-* $ sudo apt-get install -y ncftp $ sudo ln -sf /usr/include/asm-generic/ /usr/include/asm http://www.csn.ul.ie/~mel/projects/codeviz/ $ wget http://www.c…

运维工程师的职责和前景

转载自网络 运维中关键技术点解剖:1 大量高并发网站的设计方案 ;2 高可靠、高可伸缩性网络架构设计;3 网站安全问题,如何避免被黑?4 南北互联问题,动态CDN解决方案;5 海量数据存储架构 一、什么是大型网站运…

java visualvm远程监控_深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战

本文转自互联网,侵删本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看https://github.com/h2pl/Java-Tutorial喜欢的话麻烦点下Star哈文章将同步到我的个人博客:http://www.how2playlife.com本文是微信…

WCF入门(一)——简单的示例

这篇随笔写了一段时间了,当时没有发布,今天整理文档的时候发现了,顺便给配了些图。主要是绍了一下WCF编程模型,并给了一个简单的示例。 概述 WCF框架是下一代.NET平台通信应用程序的核心。它包含了Web服务、Remoting、同步和异步…

Callgrind--函数调用分析工具以及可视化方法

生成分析文件 命令行运行: valgrind --toolcallgrind ./palmGateMachine 检测完毕之后会生成一个文件callgrind.out.26805, 后面的数字其实是这个待测进程的pid 可视化方法 可视化方法 可视化工具 kcachegrind 1、下载地址: https://launchpad.net/ubuntu/trust…

Java中BASE64 编码

2019独角兽企业重金招聘Python工程师标准>>> BASE64 编码是一种常用的字符编码,在很多地方都会用到。JDK 中提供了非常方便的 BASE64Encoder 和 BASE64Decoder,用它们可以非常方便的完成基于 BASE64 的编码和解码。下面是本人编的两个小的函数…

java script (二)

实现轮播图 获取元素 document.getElementById("id名称") 事件&#xff08;onlond&#xff09; onlond "changeImg()" 在<script>中function changeImg(){ document.getElementById("img").src "图片地址"} 定时操作&…

转 [JAVA] 使用 common-fileupload 实现文件上传

就在前段时间&#xff0c;还在苦于找到不到合适的上传组件&#xff0c;虽然很早就知道了 common-fileupload&#xff0c;但当时却因为没有找到如何获取表单参数的方法而使用 jspSmartUpload&#xff0c;历尽艰辛终于找到了它的 jar&#xff0c;可是使用后才发现此东西对中文参数…

Cachegrind--缓存命中检查工具及其可视化

Cachegrind–缓存命中检查工具及其可视化 和 Callgrind–函数调用分析工具以及可视化方法 一模一样 命令改为: valgrind --toolcachegrind ./palmGateMachine 生成的文件名: cachegrind.out.8025 用kcachegrind 打开 参考我的另一篇文章&#xff1a; https://editor.csdn.…

java 快排_八大排序-快速排序(搞定面试之手写快排)

概要快速排序由C. A. R. Hoare在1960年提出&#xff0c;是八大排序算法中最常用的经典排序算法之一。其广泛应用的主要原因是高效&#xff0c;核心算法思想是分而治之。快速排序经常会被作为面试题进行考察&#xff0c;通常的考察思路是快排思想、编码实践之手写快排以及进一步…

maven命令简介

为什么80%的码农都做不了架构师&#xff1f;>>> 创建普通应用项目&#xff1a; mvn archetype:create -DgroupIdcom.byread -DartifactIdblog 创建WEB项目&#xff1a; mvn archetype:create -DgroupIdcom.byread -DartifactIdblogweb -DarchetypeArtifactIdmav…

分治策略解决幂乘问题

float fast_pow ( float x, float y ) {if ( y 1 )return x;else if ( (int)y % 2 0 )return fast_pow(x,y/2)*fast_pow(x,y/2);elsereturn fast_pow(x,(y-1)/2)*fast_pow(x,(y-1)/2)*x; } 转载于:https://www.cnblogs.com/Nicholastwo/p/9368076.html

用java实现一个计算器程序_1.2第一个java程序——hello world

第一个java程序——hello world实现一个java程序&#xff0c;主要有三个步骤&#xff1a;1、编写源代码&#xff0c;2、编译源代码&#xff0c;3、运行。java的源代码必须先编译&#xff0c;然后才能由JVM解析执行。所以我们程序员第一步的工作就是要编写java的源代码文件&…

linux valgrind Memcheck--内存检查工具

linux valgrind Memcheck–内存检查工具 使用方法: 注意&#xff0c;这里要用debug版本&#xff0c;如果是release的运行文件&#xff0c;则用debug编译出来的可执行文件替换 输出到终端: valgrind --toolmemcheck --leak-checkfull ./test.out输出到文件: valgrind --toolm…

Cassandra 1.2 发布,NoSQL 数据库

NoSQL 数据库 Cassandra 发布 1.2 正式版&#xff0c;该版本包含 CQL3&#xff0c;这是在 2012年4月发布的 1.1 版本中引入的。CQL 是一个 Cassandra 的建模和查询语言&#xff0c;类似关系数据库中的 SQL。CQL3 支持多列主键和很多其他的改进。 Another Cassandra 1.2 主要的增…

CQRS实践(3): Command执行结果的返回

上篇随笔讨论了CQRS中Command的一种基本实现。 面对UI中的各种命令&#xff0c;Controller会创建相应的Command对象&#xff0c;然后将其交给CommandBus&#xff0c;由CommandBus统一派发到相应的CommandExecutor中去执行&#xff0c;我们的ICommandBus的接口声明如下: public …

iOS学习——核心动画之Layer基础

iOS学习——核心动画之Layer基础 1、CALayer是什么&#xff1f; CALayer我们又称它叫做层。在每个UIView内部都有一个layer这样一个属性&#xff0c;UIView之所以能够显示&#xff0c;就是因为它里面有这个layer才具有显示的功能。我们可以通过操作CALayer对象&#xff0c;可以…

linux valgrind memCheck ---内存检查工具的可视化方法valkyrie

linux valgrind memCheck —内存检查工具的可视化方法valkyrie linux valgrind Memcheck–内存检查工具 1、安装valgrind valgrind 安装 安装过程没这么复杂。 直接命令行: sudo apt-get install valgrind2、安装valkyrie valkyrie下载连接: https://launchpad.net/ubuntu/…

屏幕为什么要正负压供电_负压变换器的设计

目前在工业、汽车电子系统中有诸如温度、压力、位置、重量和流量等物理参数的精确测量&#xff0c;这些信号中的一些传感器和前置放大器需要正负电压源驱动或供电&#xff0c;以提供足够宽的动态范围和抗干扰性。这些电子系统通常使用3.3V、5V、12V或24V中的某一电压的直流电源…

DataCleaner 3.1.1 发布,数据质量分析管理

DataCleaner 3.1.1 扩展了日期和时间相关的分析&#xff1b;增加周、月、年的分布分析&#xff1b;数值分析和日期时间分析增加了描述统计的选项&#xff1b;新增用于生成 UUID 和时间戳的转换器等等。 DataCleaner 是一个数据质量分析&#xff0c;比较&#xff0c;验证和监督的…

IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上)...

IIS负载均衡-Application Request Route详解第三篇&#xff1a;使用ARR进行Http请求的负载均衡&#xff08;上&#xff09; 在前两篇文章中&#xff0c;我们已经讲述如何配置与安装ARR&#xff0c;从本篇文章开始&#xff0c;我们将重点的来讲述如何在使用ARR进行负载均衡。 本…

云主机启动提示Booting from Hard Disk GRUB

版本&#xff1a;Openstack ocata 系统&#xff1a;centos7.3 环境&#xff1a;VMware workstation12 解决方法&#xff1a; 或者 转载于:https://www.cnblogs.com/fcing/p/9374855.html

函数 tostring_Kotlin实战之Fuel的高阶函数

Fuel 是一个用 Kotlin 写的网络库&#xff0c;与 OkHttp 相比较&#xff0c;它的代码结构比较简单&#xff0c;但是它的巧妙之处在于充分利用了 Kotlin 的语言特性&#xff0c;所以代码看上去干净利落。OkHttp 使用了一个 interceptor chain 来实现拦截器的串联调用&#xff0c…

linux valgrind 安装和使用

linux valgrind 安装和使用 安装过程没这么复杂。 直接命令行: sudo apt-get install valgrind Valgrind 是个开源的工具&#xff0c;功能很多。例如检查内存泄漏工具—memcheck。 Valgrind 安装&#xff1a; sudo apt-get install valgrind Valgrind 命令介绍&#xff…

UIPopoverController在ARC环境下用法注意

在ARC环境下如果便用以下代码&#xff1a; [cpp] view plaincopyprint?UIViewController *viewTwo; viewTwo [[ViewTwo alloc] initWithNibName:"ViewTwo" bundle:nil]; UIPopoverController *popover; popover [[UIPopoverController alloc] initWithConten…