OpenCV—透视变换warpPerspective
2017-10-23 22:22
387 查看
下图是维基百科中对透视投影的解释:https://zh.wikipedia.org/wiki/%E9%80%8F%E8%A7%86%E6%8A%95%E5%BD%B1
透视变换矩原理可以参见博客:http://blog.csdn.net/xiaowei_cqu/article/details/26471527
opencv中实现透视变换主要是以下两个API:
详细参数参见官方文档:
warpPerspective
https://docs.opencv.org/2.4.9/modules/imgproc/doc/geometric_transformations.html#warpperspective
getPerspectiveTransform
https://docs.opencv.org/2.4.9/modules/imgproc/doc/geometric_transformations.html#getperspectivetransform
示例源代码如下:
程序执行结果如下所示:
透视变换矩原理可以参见博客:http://blog.csdn.net/xiaowei_cqu/article/details/26471527
opencv中实现透视变换主要是以下两个API:
void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar()) Mat getPerspectiveTransform(const Point2f src[], const Point2f dst[])
详细参数参见官方文档:
warpPerspective
https://docs.opencv.org/2.4.9/modules/imgproc/doc/geometric_transformations.html#warpperspective
getPerspectiveTransform
https://docs.opencv.org/2.4.9/modules/imgproc/doc/geometric_transformations.html#getperspectivetransform
示例源代码如下:
#include "opencv2/opencv.hpp" #include <iostream> using namespace cv; using namespace std; /// 全局变量 const char* source_window = "Source image";; const char* warpPerspective_window = "warpPerspective"; /** * @主函数 */ int main( ) { Point2f srcTri[4]; Point2f dstTri[4]; Mat warpPerspective_mat( 3, 3, CV_32FC1 ); Mat src, warpPerspective_dst; /// Load the image src = imread( "lena.bmp", IMREAD_COLOR ); /// Set the dst image the same type and size as src warpPerspective_dst = Mat::zeros( src.rows, src.cols, src.type() ); /// 设置三组点,求出变换矩阵 srcTri[0] = Point2f( 0,0 ); srcTri[1] = Point2f( src.cols - 1,0 ); srcTri[2] = Point2f( 0,src.rows - 1); srcTri[3] = Point2f(src.cols - 1,src.rows - 1); dstTri[0] = Point2f( 0,src.rows*0.13 ); dstTri[1] = Point2f( src.cols*0.9,0 ); dstTri[2] = Point2f( src.cols*0.2,src.rows*0.7 ); dstTri[3] = Point2f( src.cols*0.8,src.rows ); //计算3个二维点对之间的仿射变换矩阵(2行x3列) warpPerspective_mat = getPerspectiveTransform( srcTri, dstTri ); //应用仿射变换,可以恢复出原图 warpPerspective( src, warpPerspective_dst, warpPerspective_mat, src.size() ); //显示结果 namedWindow( source_window, WINDOW_AUTOSIZE ); imshow( source_window, src ); namedWindow( warpPerspective_window, WINDOW_AUTOSIZE ); imshow( warpPerspective_window, warpPerspective_dst ); /// 等待,直到用户退出 waitKey(0); return 0; }
程序执行结果如下所示:
相关文章推荐
- 【OpenCV3】透视变换——cv::getPerspectiveTransform()与cv::warpPerspective()详解
- OpenCV中透视变换学习
- Opencv学习笔记——透视变换
- python opencv 实现任意角度的透视变换
- Opencv——仿射变换和透视变换
- opencv 拉伸、扭曲、旋转图像-透视变换
- 【OpenCV】透视变换 Perspective Transformation(续)
- opencv 透视变换
- opencv 实现任意角度的透视变换
- 【OpenCV】透视变换-将图像由不规则四边形转换成矩形
- opencv透视变换GetPerspectiveTransform的总结
- 第六章 - 图像变换 - 图像拉伸、收缩、扭曲、旋转[2] - 透视变换(cvWarpPerspective)
- OpenCVForUnity 透视校正,透视变换
- opencv透视变换
- 【opencv】鱼眼图像畸变校正——透视变换
- Opencv之仿射变换和透视变换
- python opencv实现任意角度的透视变换实例代码
- case5 opencv中透视变换结合直线检测对图像进行校正
- 【OpenCV】图像变换(五)-仿射变换和透视变换
- 用opencv计算棋盘格内角点坐标(通过多个内角点获得转换矩阵),并同时用halcon和opnecv对图像进行透视变换