透视变换函数封装

在opencv中透视变换可以封装成一个函数通过传参的方式,简化透视变换

下面是代码:参数src是输入mat型图像,dst是输出mat型图像,后面四个POINT型坐标是目标图像的四个顶点坐标.


#include<iostream>
#include<opencv2/opencv.hpp>//透视变换必要包含的文件
using namespace std;

using namespace cv;
void MatPerTrans(Mat &src,Mat &dst,cv::Point poLeftTop,cv::Point poRightTop,cv::Point poLeftDown,cv::Point poRihtDown){
	vector<Point2f> srcTri(4),dstTri(4);

	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(poLeftTop.x,poLeftTop.y);
	dstTri[1] = Point2f(poRightTop.x,poRightTop.y);
	dstTri[2] = Point2f(poLeftDown.x,poLeftDown.y);
	dstTri[3] = Point2f(poRihtDown.x,poRihtDown.y);

	cv::Mat warp_mat = getPerspectiveTransform(srcTri, dstTri);
	cv::warpPerspective( src, dst, warp_mat,Size(src.cols,src.rows));

}


VideoCapture capture(0);

int main()
{
	while(1)
	{
		Mat src,dst;
		

		capture>>src;

		MatPerTrans(src,dst,Point(0,0),Point(500,0),Point(0,500),Point(500,500));

		imshow("MyWindow", dst);

		waitKey(20);
	}

	return 0;

}


声明:转载请注明出处,本人入门级菜鸟,内容大多学习于网络,存在问题太多不一一列举, 大佬多多指教. 本人QQ941131649

猜你喜欢

转载自blog.csdn.net/qq_18984151/article/details/79398892