仿射变换是二维坐标间的线性变换, 故而变换后的图像仍然具有原图的一些性质,包括“平直性”以及“平行性”,常用于图像翻转(Flip)、旋转(Rotations)、平移(Translations)、缩放(Scale operations)等,

       透视变换(Perspective Transformation),又称投影映射(Projective Mapping)、投射变换等,是三维空间上的非线性变换,可看作是仿射变换的更一般形式,简单讲即通过一个3x3的变换矩阵将原图投影到一个新的视平面(Viewing Plane),在视觉上的直观表现就是产生或消除了远近感。落实到OpenCV,图像的透视变换由以下函数完成(该函数是针对图像的包装,其本质调用getPerspectiveTransform获得投射矩阵,并使用warpPerspective进行投射变换:

投射原理:待更.....

  使用方法:使用鼠标分别获得左上,右上,左下和右下四个点的坐标,即可进行投射变换。

代码:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <math.h>
#include <iostream>using namespace std;
using namespace cv;vector<Point> vec;void on_mouse(int EVENT, int x, int y, int flags, void* userdata)
{Mat mouse_click = *(Mat*)userdata;Point p(x, y);switch (EVENT){case EVENT_LBUTTONDOWN:{vec.push_back(p);    //读取点击坐标cout << "X = " << x << " , Y = " << y << endl;circle(mouse_click, p, 2, Scalar(255), 3);}break;default:break;}}int main()
{namedWindow("【display】");Mat grayimg, BinaryImg, morhImage;Mat img = imread("../img/55.png");setMouseCallback("【display】", on_mouse, &img);vector<Point2f> src_corners(4);vector<Point2f> dest_corners(4);while (1){if (vec.size() == 4)      //获取变换图像的四个点坐标{src_corners[0] = vec[0];src_corners[1] = vec[1];src_corners[2] = vec[2];src_corners[3] = vec[3];dest_corners[0] = vec[0];dest_corners[1] = Point(vec[3].x,vec[0].y);  //1,3坐标当作变换后的对称坐标点dest_corners[2] = Point(vec[0].x, vec[3].y);dest_corners[3] = vec[3];// 获取透视变换矩阵Mat resultImage;Mat warpmatrix = getPerspectiveTransform(src_corners, dest_corners);       //计算投射矩阵warpPerspective(img, resultImage, warpmatrix, resultImage.size(), INTER_LINEAR);//投射变换imshow("投射变换", resultImage);break;}imshow("【display】", img);waitKey(40);}waitKey(0);
}

结果:

OpenCV案例(四): 投射矫正相关推荐

  1. opencv案例: 车辆检测

    opencv案例: 车辆检测 说明:这是在哔哩哔哩上看李超老师的视频时,他讲的案例,我是搬运工. 实现功能: 1.识别出图片中的汽车对象 2.对车辆进行统计,并将统计结果展示出来 涉及到的知识点: 图 ...

  2. opencv十四天入门学习——task1

    opencv十四天入门学习--task1 前言 1.计算机视觉简介 2.计算机视觉框架 2.1 传统框架 2.2 深度学习训练框架 2.3 深度学习部署框架 2.4 当前业界主流框架应用 3.open ...

  3. 2021年大数据Flink(三十七):​​​​​​​Table与SQL ​​​​​​案例四

    目录 案例四 需求 代码实现 案例四 需求 从Kafka中消费数据并过滤出状态为success的数据再写入到Kafka {"user_id": "1", &qu ...

  4. 2021年大数据Spark(三十九):SparkStreaming实战案例四 窗口函数

    目录 SparkStreaming实战案例四 窗口函数 需求 代码实现 SparkStreaming实战案例四 窗口函数 需求 使用窗口计算: 每隔5s(滑动间隔)计算最近10s(窗口长度)的数据! ...

  5. Redis简单案例(四) Session的管理

    Redis简单案例(四) Session的管理 原文:Redis简单案例(四) Session的管理 负载均衡,这应该是一个永恒的话题,也是一个十分重要的话题.毕竟当网站成长到一定程度,访问量自然也是 ...

  6. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!...

    Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写.加上色彩.分数等深度剖析开发过程! 关于2048,我看到非常多大神,比方医生.郭神.所以我也研究了一段时间.还好是研 ...

  7. 大数据Spark(三十九):SparkStreaming实战案例四 窗口函数

    文章目录 SparkStreaming实战案例四 窗口函数 需求 代码实现 SparkStreaming实战案例四 窗口函数 需求

  8. Python学习笔记7:实操案例四(支付密码的验证,模拟QQ账号登录,商品价格竞猜,星座看运势)

    Python学习笔记7:实操案例四(支付密码的验证,模拟QQ账号登录,商品价格竞猜,星座看运势) 1.支付密码的验证: 这个主要就是调用isdigit()函数判断字符串是不是全是数字组成. pwd=i ...

  9. 【机器学习】多项式回归案例四:员工职位与薪回归模型分析

    员工职位与薪资多项式回归模型 3 多项式回归 案例四:员工职位与薪资多项式回归模型 3.1.1 模块加载与数据读入 3.1.2 数据可视化 3.1.3 模型创建与应用 3.1.4 模型对比 3.1.5 ...

最新文章

  1. opencv 图像识别 e语言_openCV-特征点匹配算法介绍一:理解特征
  2. 系统镜像_如何通过云服务器创建Windows系统镜像
  3. python的scrapy框架的安装_Python3环境安装Scrapy爬虫框架过程及常见错误
  4. 移植U-Boot.1.3.1到S3C2440和S3C2410
  5. Spring dataSource配置
  6. 无线传感器主要应用领域及发展趋势
  7. discuz x2.5用户注册后邮箱认证后无法收到邮件或者直接进垃圾箱
  8. linux下如何bash文件,Linux系统的文件管理命令及bash的相关工作特性
  9. ❤️六W字《计算机基础知识》(五)(建议收藏)❤️
  10. linux 中禁用USB存储
  11. JavaScript提高:006:ASP.NET使用easyUI TABS标签updatepanel
  12. mysql创建视图失败_mysql无法创建视图怎么办
  13. 2021年最新DNF脚本框架
  14. LaTeX快速入门(超详细~)
  15. 管理理念:导致员工工作效率低下的8大原因
  16. java浪漫代码_程序员表白教程,这些代码用过的都说浪漫
  17. hive计算几个月的最大最小时一定要把string类型转换成int类型
  18. js 解析GET 请求参数
  19. 【完整教程】nginx反向代理wss,实现不修改服务器端websocket代码加密通讯请求
  20. frl啥意思_手表日历显示frl是什么意思

热门文章

  1. C代码工具--自动生成enum值和名字映射代码
  2. Android应用及应用管理
  3. sqlserver2000换成mysql_MS SQL Server2000转换成MySQL
  4. 新的 Windows Azure 网络安全性白皮书
  5. spring aop中使用@Pointcut注解抽取可重用的切入点表达式
  6. 小班安全使用计算机教案,小班教案安全用电
  7. 引用父类成员的关键字是java_Java 中对父类成员访问用的关键字是 ,而引用当前对象的关键字是 。_学小易找答案...
  8. MySQL数据库与Oracle数据库中建表使用单引号和双引号的效果
  9. android binder机制分析 以MediaPlayer为例子
  10. 关于Silverlight安装问题之四