opencv图像的旋转角度计算,opencv图像仿射变换

opencv图像的旋转角度计算,opencv图像仿射变换,OpenCV图像几何变换之透视变换

这篇文章主要为大家详细介绍了OpenCV图像几何变换之透视变换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了OpenCV图像几何变换之透视变换的具体代码,供大家参考,具体内容如下

1. 基本原理

透视变换(视角转换)的本质是将图像投影到一个新的视平面,其通用变换公式为:

(u,v)为原始图像像素坐标,(x=x/w ,y=y/w )为变换之后的图像像素坐标。透视变换矩阵图解如下:

仿射变换(仿射变换)可以理解为透视变换的特殊形式。透视变换的数学表达式为:

所以,给定透视变换对应的四对像素点坐标,即可求得透视变换矩阵;反之,给定透视变换矩阵,即可对图像或像素点坐标完成透视变换,如下图所示:

2. OpenCV透视变换函数

mat getperspective transform(定点2f * src,定点2f* dst)

//从四对对应点计算透视变换。

//src源图像中四边形顶点的坐标。

//夏令时目标图像中相应四边形顶点的坐标。

void warp透视图(input array src,OutputArray dst,InputArray M,Size dsize,int flags=INTER_LINEAR,int borderMode=BORDER_CONSTANT,const Scalar borderValue=Scalar())

//对图像应用透视变换。

//src源图像。

//夏令时大小为尺寸且类型与科学研究委员会相同的目标图像。

//M3 * 3变换矩阵。

//dsize目标图像的大小。

//标志插值方法和可选标志扭曲_反转_贴图的组合,表示M是逆变换(夏令时,夏令时).

//边框模式像素外推方法。当borderMode=BORDER_TRANSPARENT时,意味着目标图像中与源图像中的"异常值"相对应的像素不会被该函数修改。

//边框值在恒定边框情况下使用的值。默认情况下,它是0。

3. 程序

#包括输入输出流

#包含" highgui.h "

# include 打开cv2/imgproc/imgproc。HPP的

int main()

{

//获取原始图像。

cv:Mat original image=cv:im read(路。png’);

//透视图像。

cv:Mat透视图像;

//透视变换

cv:Point2f目标点[4],图像点[4];

//原始图像点。

imagePoints[0].x=图像点[0].y=457.0

imagePoints[1].x=图像点[1].y=291.0

图像点[2]。x=624.0图像点[2]。y=291.0

图像点[3]。x=1000.0图像点[3]。y=457.0

//透视图像的客观点。

//上移透视图像:目标点. y值.

//向左移动透视图像:目标点数. x值.

double moveValueX=0.0

双移动值Y=0.0

目标点数[0]。x=46.0移动值x目标点数[0]。y=920.0移动值y

目标要点[1]。x=46.0移动值x目标要点[1]。y=100.0移动值y

目标要点[2]。x=600.0移动值x目标要点[2]。y=100.0移动值y

目标要点[3]。x=600.0移动值x目标要点[3]。y=920.0移动值y

cv:Mat transform=cv:get perspective transform(目标点,图像点);

//透视。

cv:翘曲透视(原图,

透视图像,

转换,

cv:Size(originalImage.rows,originalImage.cols),

cv:INTER _ LINEAR | cv:WARP _ INVERSE _ MAP);

//cv:imshow(透视图像,透视图像);

//cvWaitKey(0);

cv:im写(透视图像。png ,透视图像);

返回0;

}

原始图像及其透视变换结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

opencv图像的旋转角度计算,opencv图像仿射变换