透视变换:图像几何变换,将原图像按坐标投射到新的平面上,从四组对应点计算新的坐标,进行线性变换。
在OPENCV中,可能过Mat getPerspectiveTransform ( cons point2f src [] , const Point2f dst [] )轻松地将图像投射到新的平面上。
参数:
- src - 输入图像上矩形顶点的坐标
- dst - 输出图像上相应矩形的顶点坐标
文章图片
透视变换
首先通过原图进行取点分析:
文章图片
原图
通过画图工具打开,寻找黑桃K四个点位置,并记录其坐标位置:
文章图片
四个点的位置分别为(527,141),(771,190),(405,395),(674,457),再依据勾股定理,算出黑桃K的长:350,宽:249,如图:
【C++|DAY2 OpenCv学习笔记( C++ 透视变换)】
文章图片
将黑桃K转换成原点坐标(0,0),则其坐标转换为:[0,0],[249,0],[0,350],[249,350],最终将黑桃K转换为:
文章图片
依据前一次的OpenCv安装教程中的DEMO,更改其C++代码,实现如下:
string path = "images/cards.jpg";
Mat img = imread(path);
Mat matrix, chgImg;
float w = 249, h = 350; //计算出来的长和宽
Point2f src[4] = { {527,141},{771,190},{405,395},{674,457} };
Point2f dst[4] = { {0.0f,0.0f},{w,0.0f},{0.0f,h},{w,h} };
matrix = getPerspectiveTransform(src, dst);
warpPerspective(img, chgImg, matrix, Point(w, h));
imshow("Image", img);
imshow("New Image", chgImg);
waitKey(0);
推荐阅读
- 安全|OpenHarmony安全子系统之应用签名与验签
- C语言和C++区别——C和C++之间互相调用
- Linux|管道实现进程间通信之命名管道
- c++|STL中string类的实现(细节避坑)
- c++|C++类和对象相关内容详细总结(值得收藏喔~)
- C++笔记|c++入门(二)函数重载 --- c和c++中相互调用对方的静态库
- c++|唠唠C++入门那些事
- C++|C++快速入门(上)
- 牛客网刷题记录|牛客网刷题记录 || 第一番