warpPerspective函数

主要作用:对图像进行透视变换,就是变形

函数的调用形式:

C++:void warpPerspective(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:透视变换的矩阵

Size dsize:输出图像的大小

int flags=INTER_LINEAR:输出图像的插值方法,

combination of interpolation methods (INTER_LINEAR or INTER_NEAREST) and the optional flagWARP_INVERSE_MAP, that sets M as the inverse transformation (  )

int borderMode=BORDER_CONSTANT:图像边界的处理方式

const Scalar& borderValue=Scalar():边界的颜色设置,一般默认是0

函数原理:

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。通用的变换公式为:

u,v是原始图片左边,对应得到变换后的图片坐标x,y,其中
变换矩阵可以拆成4部分,表示线性变换,比如scaling,shearing和ratotion。用于平移,产生透视变换。所以可以理解成仿射等是透视变换的特殊形式。经过透视变换之后的图片通常不是平行四边形(除非映射视平面和原来平面平行的情况)。

重写之前的变换公式可以得到:

所以,已知变换对应的几个点就可以求取变换公式。反之,特定的变换公式也能新的变换后的图片。简单的看一个正方形到四边形的变换:
变换的4组对应点可以表示成:

根据变换公式得到:

定义几个辅助变量:

都为0时变换平面与原来是平行的,可以得到:

不为0时,得到:

求解出的变换矩阵就可以将一个正方形变换到四边形。反之,四边形变换到正方形也是一样的。于是,我们通过两次变换:四边形变换到正方形+正方形变换到四边形就可以将任意一个四边形变换到另一个四边形。

opencv代码:

[cpp] view plaincopy
  1. #include<cv.h>
  2. #include<highgui.h>
  3. #pragma comment(lib, "cv.lib")
  4. #pragma comment(lib, "cxcore.lib")
  5. #pragma comment(lib, "highgui.lib")
  6. int main()
  7. {
  8. CvPoint2D32f srcTri[4], dstTri[4];
  9. CvMat*       warp_mat = cvCreateMat (3, 3, CV_32FC1);
  10. IplImage*    src = NULL;
  11. IplImage*    dst = NULL;
  12. src = cvLoadImage ("test.png", 1);
  13. dst = cvCloneImage (src);
  14. dst->origin = src->origin;
  15. cvZero (dst);
  16. srcTri[0].x = 0;
  17. srcTri[0].y = 0;
  18. srcTri[1].x = src->width - 1;
  19. srcTri[1].y = 0;
  20. srcTri[2].x = 0;
  21. srcTri[2].y = src->height - 1;
  22. srcTri[3].x = src->width - 1;
  23. srcTri[3].y = src->height - 1;
  24. dstTri[0].x = src->width * 0.05;
  25. dstTri[0].y = src->height * 0.33;
  26. dstTri[1].x = src->width * 0.9;
  27. dstTri[1].y = src->height * 0.25;
  28. dstTri[2].x = src->width * 0.2;
  29. dstTri[2].y = src->height * 0.7;
  30. dstTri[3].x = src->width * 0.8;
  31. dstTri[3].y = src->height * 0.9;
  32. cvGetPerspectiveTransform (srcTri, dstTri, warp_mat);
  33. cvWarpPerspective (src, dst, warp_mat);
  34. cvNamedWindow("src", 1);
  35. cvShowImage("src", src);
  36. cvNamedWindow ("Affine_Transform", 1);
  37. cvShowImage ("Affine_Transform", dst);
  38. cvWaitKey (0);
  39. cvReleaseImage (&src);
  40. cvReleaseImage (&dst);
  41. cvReleaseMat (&warp_mat);
  42. return 0;
  43. }

warpPerspective函数相关推荐

  1. CV之FD:基于dlib、cv2库利用warpPerspective函数和_68_face_landmarks文件实现AI换脸渐变融合视频效果

    CV之FD:基于dlib.cv2库利用warpPerspective函数和_68_face_landmarks文件实现AI换脸渐变融合视频效果 目录 输出结果 设计思路 输出结果 设计思路 实现代码 ...

  2. 【Python+OpenCV 图像透视变换 warpPerspective函数】

    Python+OpenCV 图像透视变换 warpPerspective函数 1.函数介绍 2.代码实例 3.实现效果 1.函数介绍 warpPerspective():对图像进行透视变换.简单来说, ...

  3. OpenCV 变换整幅图像的warpPerspective()函数——中心化坐标表示

    OpenCV自带的warpPerspective()函数,可以根据透视变换参数实现从一幅图像到另外一幅图像之间的映射变换.OpenCV为了保证坐标的对应关系,在一些情况下,会对变换的图像进行裁剪,以至 ...

  4. opencv透视变换:GetPerspectiveTransform、warpPerspective函数的使用

    透视变换在图像还原的上的应用很广泛,他是将成像投影到一个新的视平面.比如两个摄像头在不同的角度对统一物体进行拍照,物体上的同一个点在两张照片上的坐标是不一样的,为了实现两张图片同一个点的对应关系映射, ...

  5. OpenCV-Python投影透视变换函数getPerspectiveTransform及warpPerspective详解

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython ░ 一.getPerspectiveTransform 函数 getPerspectiveTr ...

  6. OpenCV每日函数 专栏简述(陆续整理中)

    一.OpenCV概述 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库.OpenCV库拥有超过 2500 种优化算法,其中包 ...

  7. 利用OpenCV实现抖音最强变脸术 | CSDN原力计划

    作者 | 亓斌 来源 | CSDN原力计划获奖作品 (*点击阅读原文,查看作者更多文章) 最近一个"最强变脸术"又火爆抖音啦,还不知道的朋友建议先打开抖音,搜索"最强变脸 ...

  8. 使用OpenCV进行图像全景拼接

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 图像拼接是计算机视觉中最成功的应用之一.如今,很难找到不包含此功能 ...

  9. OpenCV中的透视变换介绍

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 透视变换原理 透视变换是将图像从一个视 ...

最新文章

  1. Django REST framework 简介
  2. python教程三角函数_Python入门之三角函数tan()函数实例详解
  3. python rabitmq_python RabbitMQ队列使用
  4. 百度SEO站群流光风格个人主页HTML源码
  5. Struts2的标签概述
  6. 西安计算机技校专业,西安计算机软件工程学校哪里好|西安铁道技师学院计算机软件工程专业|西安计算机学校怎么样?|西安中专学校...
  7. 求解偏微分方程开源有限元软件deal.II学习--Step 5
  8. 大象英语-电脑键盘练习工具儿童版(学英语、学电脑)
  9. Aspose word pdf 相互转换
  10. px和毫米的换算_px与mm换算(px换成mm)
  11. goahead(嵌入式Web服务器)之cgi篇
  12. 2017 年度十大最受欢迎的浏览器,你在用哪一款?
  13. 超级内存NVDIMM--要和内存说再见?Intel将推存储界新物种NVDIMM内存
  14. 如何使用Element-UI?
  15. python怎么编写重复程序,python重复执行怎么写
  16. 一种新型的智能城市工业物联网安全攻击检测框架
  17. 请求网站响应的文本带有乱码,原来是Content-encoding惹的祸,一文带你搞懂`Content-encoding`、`Accept-Encoding`
  18. 人工智能领域期刊和顶会(中国计算机学会推荐国际学术期刊-2019)
  19. 实时最新中国省市区县geoJSON格式地图行政边界数据Echarts地图数据(可精确到街道级)
  20. 揭秘得物客服IM全链路通信过程

热门文章

  1. WIN10映射ubuntu1604共享目录(网络驱动器)
  2. WINCE6.0+S3C2443的启动过程---eboot3
  3. minijson使用_java layuimini使用json传值
  4. js添加多个子节点_JS创建DOM节点-使用document.createElement()创建子节点或同级节点...
  5. 第一个通过HCIEv3.0的咱的学员
  6. openSUSE install albertlauncher from source files
  7. Java之JVM 优化经验总结
  8. 2014 年第六届全国大学生数学竞赛预赛数学类最后一题参考解答
  9. 安装 ArcGISAPI31forSilverlight an i/o error occured while installing a file错误解决
  10. WCF传送大数据时的错误“ 超出最大字符串内容长度配额”