这篇文章主要为大家详细介绍了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;
}
原始图像及其透视变换结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。