opencv透视变换GetPerspectiveTransform的总结

对于透视变换,必须为map_matrix分配一个3x3数组,除了3x3矩阵和三个控点变为四个控点外,透视变化在其他方面与仿射变换完全类似。具体可以参考:点击打开链接

主要用到两个函数WarpPerspective和GetPerspectiveTransform。

1)WarpPerspective

对图像进行透视变换

void cvWarpPerspective( const CvArr* src, CvArr* dst,const CvMat* map_matrix,

int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,

CvScalar fillval=cvScalarAll(0) );

src

输入图像.

dst

输出图像.

map_matrix

3×3 变换矩阵

flags

插值方法和以下开关选项的组合:

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

·       CV_WARP_INVERSE_MAP- 指定 matrix 是输出图像到输入图像的反变换,因此可以直接用来做象素插值。否则, 函数从 map_matrix 得到反变换。

fillval

用来填充边界外面的值

函数 cvWarpPerspective 利用下面指定矩阵变换输入图像:

  • 如果没有指定 CV_WARP_INVERSE_MAP , 
  • 否则, 

要变换稀疏矩阵,使用 cxcore 中的函数 cvTransform 。

2)GetPerspectiveTransform

由四对点计算透射变换

CvMat* cvGetPerspectiveTransform( const CvPoint2D32f*src, const CvPoint2D32f* dst,

CvMat*map_matrix );

#define cvWarpPerspectiveQMatrixcvGetPerspectiveTransform

src

输入图像的四边形顶点坐标。

dst

输出图像的相应的四边形顶点坐标。

map_matrix

指向3×3输出矩阵的指针。

函数cvGetPerspectiveTransform计算满足以下关系的透射变换矩阵:

这里,dst(i)= (xi,yi),src(i)= (xi,yi),i = 0..3.

时间: 2024-10-22 07:46:39

opencv透视变换GetPerspectiveTransform的总结的相关文章

opencv透视变换

opencv透视变换 实现透视变换 目标: 在这篇教程中你将学到: 1.如何进行透视变化 2.如何生存透视变换矩阵 理论: 什么是透视变换: 1.透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping). 2.换算公式 u,v是原始图片左边,对应得到变换后的图片坐标x,y,其中.变换矩阵可以拆成4部分,表示线性变换,比如scaling,shearing和ratotion.用于

Java基于opencv—透视变换矫正图像

很多时候我们拍摄的照片都会产生一点畸变的,就像下面的这张图 虽然不是很明显,但还是有一点畸变的,而我们要做的就是把它变成下面的这张图 效果看起来并不是很好,主要是四个顶点找的不准确,会有一些偏差,而且矫正后产生的目标图是倒着的,哪位好心人给说说为啥 因为我也没有测试畸变很大的图像,也不能保证方法适用于每个图像,这里仅提供我的思路供大家参考. 思路: 我们最重要的就是找到图像的四个顶点,有利用hough直线,求直线交点确定四个顶点,有采用寻找轮廓确定四个顶点等等:今天我提供的思路,也是采用寻找轮廓

OpenCV 透视变换实例

参考文献: http://www.cnblogs.com/self-control/archive/2013/01/18/2867022.html http://opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects/ 透视变换: http://blog.csdn.net/xiaowei_cqu/article/details/26478135 具体流程为: a)载入图像→灰度化→边

神奇的透视变换

1. 理论公式 透视变换(Pespective Transform)是将一个视平面上的物体转换到一个新的视平面.变换公式如下: 其中等式右边的u,v是源图片的坐标,在变换后图像中的对应坐标x, y,可以用下式计算得到: 据此,原图像和透视变换后的目标图像中的点,对应转换关系如下: 变换矩阵的子矩阵表示线性变换,比如scaling(缩放),shearing和rotation(旋转).表示平移.产生透视变换.所以可以认为仿射变换是透视变换的特殊形式.到此,我们解释了透视变换的理论公式,那透视变换矩阵

网友提问(透视变化)

您好: 我在网上看到您的opencv透视变换的博客,https://www.cnblogs.com/jsxyhelu/p/4219564.html, 我是opencv小菜鸟一个,现在想要得到一个图片变形之后保存,整个图片信息不丢失,即四个角的信息不丢失应该怎么做?原图中某一点在新图中坐标应该怎么计算?万望不吝赐教,不胜感激,万分感谢. 你好: 我按照您的代码和网上找到的python代码(https://blog.csdn.net/fengxueniu/article/details/779643

OpenCV】透视变换 Perspective Transformation(续)

载分 [OpenCV]透视变换 Perspective Transformation(续) 分类: [图像处理] [编程语言] 2014-05-27 09:39 2776人阅读 评论(13) 收藏 举报 透视变换的原理和矩阵求解请参见前一篇<透视变换 Perspective Transformation>.在OpenCV中也实现了透视变换的公式求解和变换函数. 求解变换公式的函数: [cpp] view plaincopyprint? Mat getPerspectiveTransform(c

【OpenCV】透视变换 Perspective Transformation(续)

透视变换的原理和矩阵求解请参见前一篇<透视变换 Perspective Transformation>.在OpenCV中也实现了透视变换的公式求解和变换函数. 求解变换公式的函数: Mat getPerspectiveTransform(const Point2f src[], const Point2f dst[]) 输入原始图像和变换之后的图像的对应4个点,便可以得到变换矩阵.之后用求解得到的矩阵输入perspectiveTransform便可以对一组点进行变换: void perspec

【OpenCV】透视变换矫正

演示结果参考: 功能实现:运行程序,会显示图片的尺寸,按回车键后,依次点击需矫正的图片的左上.右上.左下.右下角,结果弹出矫正后的图片,如图上的PIC2对话框.按下字符'q'后退出. 代码如下:(注:图中的11.jpg图片自己选取放到该程序目录下.) #include <opencv2/opencv.hpp> #include <iostream> #include <vector> using namespace std; using namespace cv; co

OpenCV+Python 文字识别(重点图像透视变换)

1 # Author:Winter Liu is coming! 2 import cv2 as cv 3 import numpy as np 4 import pytesseract 5 6 7 # 预处理,高斯滤波(用处不大),4次开操作 8 # 过滤轮廓唯一 9 def contour_demo(img): 10 gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) 11 gray = cv.GaussianBlur(gray, (5, 5), 1) 12