15基于opencv的旋转_仿射变换_SURF特征点检测

这篇博客介绍了如何使用OpenCV进行图像的旋转、仿射变换,并详细讲解了warpAffine()函数的参数及应用。此外,还探讨了SURF特征点检测,包括drawMatches()函数的参数解析,以及BruteForceMatcher类在特征匹配中的作用。通过示例代码展示了完整的图像处理流程。
摘要由CSDN通过智能技术生成

旋转、仿射变换和SURF特征点检测

一、弯曲变换函数warpAffine ()

1.1 warpAffine ()各参数详解

voidwarpAffine(InputArray src,OutputArray dst,InputArray M,Size dsize, int flags =INTER_LINEAR, intborderMode =BORDER_CONSTANT,constScalar& borderValue =Scalar())

Ø  第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。

Ø  第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,需和源图片有一样的尺寸和类型。

Ø  第三个参数,InputArray类型的M,2×3的变换矩阵。

Ø  第四个参数,Size类型的dsize,表示输出图像的尺寸。

Ø  第五个参数,int类型的flags,插值方法的标识符。此参数有默认值INTER_LINEAR(线性插值),可选的插值方式如下:

INTER_NEAREST - 最近邻插值

INTER_LINEAR - 线性插值(默认值)

INTER_AREA - 区域插值

INTER_CUBIC –三次样条插值

INTER_LANCZOS4-Lanczos插值

CV_WARP_FILL_OUTLIERS- 填充所有输出图像的象素。如果部分象素落在输入图像的边界外,那么它们的值设定为 fillval.

CV_WARP_INVERSE_MAP –表示M为输出图像到输入图像的反变换,即 。因此可以直接用来做象素插值。否则,warpAffine函数从M矩阵得到反变换。

Ø  第六个参数,int类型的borderMode,边界像素模式,默认值为BORDER_CONSTANT。

Ø  第七个参数,const Scalar&类型的borderValue,在恒定的边界情况下取的值,默认值为Scalar(),即0。

 

另外提一点,我们的WarpAffine函数与一个叫做cvGetQuadrangleSubPix( )的函数类似,但是不完全相同。WarpAffine要求输入和输出图像具有同样的数据类型,有更大的资源开销(因此对小图像不太合适)而且输出图像的部分可以保留不变。而cvGetQuadrangleSubPix 可以精确地从8位图像中提取四边形到浮点数缓存区中,具有比较小的系统开销,而且总是全部改变输出图像的内容。

1.2调用示例 

 

二、旋转变换函数

2.1 getRotationMatrix2D()各参数详解

MatgetRotationMatrix2D(Point2fcenter,double angle,double scale)

Ø  第一个参数,Point2f类型的center,表示源图像的旋转中心。

Ø  第二个参数,double类型的angle,旋转角度。角度为正值表示向逆时针旋转(坐标原点是左上角)。

Ø  第三个参数,double类型的scale,缩放系数。

 

此函数计算以下矩阵:

 

其中:

 

2.2调用示例

 

三、 SURF特征点检测

在OpenCV中,使用SURF进行特征点描述主要是drawMatches方法和BruteForceMatcher类的运用。

3.1 drawMatches()函数各参数详解

drawMatches()函数用于绘制出相匹配的两个图像的关键点

voiddrawMatches(constMat& img1, constvector<KeyPoint>&keypoints1,constMat& img2, constvector<KeyPoint>&keypoints2, constvector<DMatch>& matches1to2,Mat&outImg,constScalar&matchColor =Scalar::all(-1),constScalar&singlePointColor =Scalar::all(-1),constvector<char>&matchesMask =vector<char>(),intflags = DrawMatchesFlags::DEFAULT)

 

voiddrawMatches(constMat& img1, constvector<KeyPoint>&keypoints1,constMat& img2, constvector<KeyPoint>&keypoints2,constvector<vector<DMatch>>&matches1to2,Mat&outImg,constScalar&matchColor =Scalar::all(-1),constScalar&singlePointColor =Scalar::all(-1),constvector<vector<char>>& matchesMask =vector<vector<char>>(), intflags = DrawMatchesFlags::DEFAULT)

 

除了第五个参数matches1to2和第九个参数matchesMask有细微的差别以外,两个版本的基本上相同。

Ø  第一个参数,const Mat&类型的img1,第一幅源图像。

Ø  第二个参数,const vector<KeyPoint>&类型的keypoints1,根据第一幅源图像得到的特征点,它是一个输出参数。

Ø  第三个参数,const Mat&类型的img2,第二幅源图像。

Ø  第四个参数,const vector<KeyPoint>&类型的keypoints2,根据第二幅源图像得到的特征点,它是一个输出参数。

Ø  第五个参数,matches1to2,第一幅图像到第二幅图像的匹配点,即表示每一个图1中的特征点都在图2中有一一对应的点、

Ø  第六个参数,Mat&类型的outImg,输出图像,其内容取决于第五个参数标识符falgs。

Ø  第七个参数,const Scalar&类型的matchColor,匹配的输出颜色,即线和关键点的颜色。它有默认值Scalar::all(-1),表示颜色是随机生成的。

Ø  第八个参数,c

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三公子Tjq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值