目录
一、什么是透视变换?
例子
现在你有一副牌,从你的视角看过去,这四张牌是这样的:
现在我们想得到他们的俯视图,也就是把牌立起来,变成这样:
这就是透视变换做的事。
定义
透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。
二、实现代码
-
#include <opencv2/opencv.hpp>
-
#include <iostream>
-
-
float w =
250;
-
float h =
350;
-
-
using
namespace cv;
-
using
namespace
std;
-
-
int main()
-
{
-
//定义图片路径
-
string path =
"Resources/cards.jpg";
-
Mat img = imread(path);
-
//创建透视变换矩形
-
Mat matrix;
-
//创建画布,用来存放变换后的牌的矩阵
-
Mat imgWarp;
-
//原图的四个点,我们可以用画图来看对应坐标
-
Point2f src[
4] = { {
529,
142},{
771,
190},{
405,
395},{
674,
457} };
-
//目标图的四个点
-
Point2f dest[
4] = { {
0.0f,
0.0f},{w,
0.0f},{
0.0f,h},{w,h} };
-
//定义矩形,参数分别为原图四点,目标图四点;
-
matrix = getPerspectiveTransform(src, dest);
-
//透视变换输出函数,参数分别为原图,目标图,透视变换矩阵,目标图的右下角的点
-
warpPerspective(img, imgWarp, matrix,Point(w,h));
-
-
//循环,标出原图中做透视变换的点
-
for (
int i =
0; i <
4; i++)
-
{
-
circle(img, src[i],
10, Scalar(
0,
0,
255), FILLED);
-
}
-
-
//展示
-
imshow(
"Image", img);
-
imshow(
"ImageWarp", imgWarp);
-
waitKey(
0);
-
return
0;
-
}
三、效果
转载:https://blog.csdn.net/Kukeoo/article/details/116244417
查看评论