热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

opencv仿射变换

API函数1、获取仿射矩阵(1)getAffineTransform设置原图像与目标图像上三点计算矩阵MatAgetAffineTransform(

API函数


1、获取仿射矩阵

(1)getAffineTransform       //设置原图像与目标图像上三点计算矩阵
Mat A=getAffineTransform(const Point2f* src, const Point2f* dst)
      参数const Point2f* src:原图的三个固定顶点
      参数const Point2f* dst:目标图像的三个固定顶点
      返回值:Mat型变换矩阵,可直接用于warpAffine()函数
      注意,顶点数组长度超过3个,则会自动以前3个为变换顶点;数组可用Point2f[]或Point2f*表示
(2)getRotationMatrix2D       //计算二维旋转变换矩阵
Mat B=getRotationMatrix2D (CvPoint2D32f  center,double angle,double scale)
       参数CvPoint2D32f  center,表示源图像旋转中心
       参数double angle,旋转角度,正值表示逆时针旋转
       参数double scale,缩放系数



2、进行仿射变换

C++ void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
       //参数InputArray src:输入变换前图像
        //参数OutputArray dst:输出变换后图像,需要初始化一个空矩阵用来保存结果,不用设定矩阵尺寸
        //参数InputArray M:变换矩阵,用另一个函数getAffineTransform()计算
        //参数Size dsize:设置输出图像大小
        //参数int flags = INTER_LINEAR:设置插值方式,默认方式为线性插值(另一种WARP_FILL_OUTLIERS)
        //参数int borderMode=BORDER_CONSTANT:边界像素模式,默认值BORDER_CONSTANT
        //参数const Scalar& borderValue=Scalar(),在恒定边界情况下取的值,默认值为Scalar(),即0


示例代码

#include
#include
using namespace cv;
using namespace std;//全局变量
Mat warpmat(2, 3, CV_32FC1);
Mat ropmat(2, 3, CV_32FC1);
int s11, s12, s21, s22, s31, s32;
int d11, d12, d21, d22, d31, d32;void warp()
{//定义原图与目标图像的三组点Point2f src_point[3];Point2f dst_point[3];cout <<"请输入原图像的第一个点" <> s11;cin >> s12;src_point[0] &#61; Point2f(s11, s12);cout <<"请输入原图像的第二个点" <> s21;cin >> s22;src_point[1] &#61; Point2f(s21, s22); cout <<"请输入原图像的第三个点" <> s31;cin >> s32;src_point[2] &#61; Point2f(s31, s32);cout <<"原图像的三个点为&#xff1a;" <> d11;cin >> d12;dst_point[0] &#61; Point2f(d11, d12);cout <<"请输入目标图像的第二个点" <> d21;cin >> d22;dst_point[1] &#61; Point2f(d21,d22);cout <<"请输入目标图像的第三个点" <> d31;cin >> d32;dst_point[2] &#61; Point2f(d31, d32);cout <<"目标图像的三个点为&#xff1a;" <}void rot(Mat src)
{//图像旋转中心Point center &#61; Point(src.cols / 2, src.rows / 2);//旋转角度&#xff1a;角度为正表示逆时针旋转double angle;cout <<"旋转角度为&#xff1a;" <> angle;//缩放系数double scale;cout <<"缩放系数为" <> scale;cout <<"——————————————" <}int main()
{//载入原图Mat src &#61; imread("12.bmp");cvtColor(src, src, COLOR_BGR2GRAY);Mat dst&#61;Mat::zeros(src.size(),src.type());Mat dst1 &#61; Mat::zeros(src.size(), src.type());//改变console(控制台)字体颜色 system("color 0B");//判断图片是否读入if (!src.data){printf("读取图片image0错误~&#xff01; \n");return false;}//先显示原图namedWindow("【原始图像】");imshow("【原始图像】", src);//循环轮询按键while (1){cout <<"\n此图像的大小为&#xff1a;" <> c;if (c &#61;&#61; 1){cout <<"您正在进行坐标变换图像操作" <}


 


推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文介绍了最长上升子序列问题的一个变种解法,通过记录拐点的位置,将问题拆分为左右两个LIS问题。详细讲解了算法的实现过程,并给出了相应的代码。 ... [详细]
author-avatar
yuzhenhua09
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有