在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