紫水晶书院•文思飞扬(散文、随笔、杂文、评论、科普、日记……想法读书

【图像处理】OpenCV系列十七 --- 几何图像变换函数详解(

2019-04-30  本文已影响13人  307656af5a04

上一篇我们学习了仿射变换的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()) )

会支持下面的几种操作:

3、参数详解

二、getAffineTransform()函数

1、函数原型

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

Mat getAffineTransform( InputArray src, 
      InputArray dst );

2、函数功能
用三对相对应的点计算图像的仿射变换;该函数计算仿射变换的2x3矩阵。
具体公式如下:

仿射变换

其中:

仿射变换

3、参数详解

三、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矩阵;
具体公式如下:

透视变换

其中:

透视变换

3、参数详解

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

矩阵分解的类型

四、getRectSubPix()函数

1、函数原型

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

2、函数功能
从原图像中提取提取一个感兴趣的矩形区域图像;
具体的公式如下:

getRectSubPix

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

3、参数详解

五、getRotationMatrix2D()函数

1、函数原型

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

2、函数功能
计算二维旋转的仿射矩阵;
具体的公式如下:

仿射矩阵

其中,

仿射矩阵

3、参数详解

六、invertAffineTransform()函数

1、函数原型

void invertAffineTransform(InputArray M, 
    OutputArray iM);

2、函数功能
逆仿射变换,计算由2×3矩阵M表示的逆仿射变换,
具体的公式如下:

逆仿射变换

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

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

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

上一篇下一篇

猜你喜欢

热点阅读