opencv透视变换函数,通过输入4个角点坐标实现透视变换

需要头文件

 

#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"
//
//函数功能:图片透视变换
//输入:   Mat src原图像 ,int p1x/y p2x/y p3x/y p4x/y对应左上,右上、左下、右下四个点的x\y坐标 ,
//输入:   int width,int height分别指转换后的图像宽、高
//输出:   透视变换后的图像
//

Mat transformmat(Mat src,int p1x,int p1y,int p2x,int p2y,int p3x,int p3y,int p4x, int p4y,int width,int height)
{
	Mat result;
	Point2f srcTri[4], dstTri[4];

	dstTri[0].x = 0;
	dstTri[0].y = 0;
	dstTri[1].x = width;
	dstTri[1].y = 0;
	dstTri[2].x = 0;
	dstTri[2].y = height;
	dstTri[3].x = width;
	dstTri[3].y = height;

	srcTri[0].x = p1x;
	srcTri[0].y = p1y;
	srcTri[1].x = p2x;
	srcTri[1].y = p2y;
	srcTri[2].x = p3x;
	srcTri[2].y = p3y;
	srcTri[3].x = p4x;
	srcTri[3].y = p4y;

	Mat transform = Mat::zeros(3, 3, CV_32FC1); //透视变换矩阵
	transform = getPerspectiveTransform(srcTri, dstTri);  //获取透视变换矩阵		
	warpPerspective(src, result, transform, Size(height+1,width+1));  //透视变换

	return result;
}

 

你可能感兴趣的:(#,OpenCV,opencv,透视变换,图像校正)