任务描述


在给出上述待处理图像后,自定义选对应点作(逆)透视变换,使得道路呈俯视无透视状态(即路宽不再有近大远小效果)

实现过程

  • 任务描述
  • 透视投影介绍
  • 一、实现方法
  • 二、关键代码
    • 1.自定义选对应点
    • 2.进行透视变换
  • 三、效果展示

透视投影介绍

透视投影指同样的景物在两个不同位置和角度的摄像机上形成的图像之间呈现一种透视关系,它是图形渲染流程中的非常重要的一个步骤,是将三维物体从相机空间变换到视锥体空间,然后再到规则观察体中。在得到相机坐标后,就相当于得到了人眼观察世界中物体的坐标,但是需要把物体映射到一个二维平面上用于显示,投影矩阵就起到把三维坐标映射到二维坐标的作用,同时因为三维空间有深度的概念,因此把Z轴转化成深度。


简单介绍一下将世界坐标系转化到像素坐标系的过程:首先是先将世界坐标系通过旋转平移转换到相机坐标系;然后通过透视投影将相机坐标系转化到图像坐标系,此步用到的三角形相似的关系;最后将图像坐标系通过单位换算以及平移操作转换到像素坐标系。

一、实现方法

在进行透视投影的时候,我并没有预先设定对应点的坐标,而是添加了一个交互功能,通过用户交互的方式进行标注,也就是用户需要先在窗口中通过鼠标点击的方式选择对应点的坐标,然后再将选取的区域进行透视投影,本任务要求对道路进行透视变换,所以我在选择对应点的时候在原图中选择了一段道路。

二、关键代码

1.自定义选对应点

代码如下(示例):

# 用鼠标点击的方式得到点的坐标,注意点要有顺序关系,左上、左下、右下、右上
def get_points():def determine_point(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDOWN:global numglobal p1p1[num] = [x, y]num += 1cv2.circle(img, (x, y), 0, (0, 0, 255))cv2.imshow("determine_point", img)if num > 3:cv2.destroyWindow('determine_point')cv2.imshow("determine_point", img)cv2.setMouseCallback("determine_point", determine_point)

2.进行透视变换

代码如下(示例):

M = cv2.getPerspectiveTransform(p1, p2)
newImg = cv2.warpPerspective(img, M, (row, col))

这里使用的函数是opencv的库函数,具体参数可进行自学


三、效果展示

得到的结果如下图所示,在图片下方可以很明显的看出城市道路并没有出现近大远小的效果,但是由于图像质量的问题会出现远处景物出现模糊的现象

python实现图像透视投影相关推荐

  1. Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式

    Python 对图像进行base64编码及解码读取为numpy.opencv.matplot需要的格式 1. 效果图 2. 源码 参考 这篇博客将介绍Python如何对图像进行base64编解码及读取 ...

  2. 使用OpenCV和Python计算图像的“彩色度”

    使用OpenCV和Python计算图像"彩色度" 1. 效果图 2. 炫彩度量方法是什么? 3. 源代码 参考 你是否尝试过计算每个图像的炫彩值,并根据炫彩值对自己的图像数据集进行 ...

  3. 【python】图像映射:单应性变换与图像扭曲

    [python]图像映射:单应性变换与图像扭曲 单应性变换(Homography) 图像扭曲(仿射变换) 图中图 分段仿射扭曲 单应性变换(Homography) 单应性变换(Homography)即 ...

  4. Python计算机视觉——图像到图像的映射

    Python计算机视觉--图像到图像的映射 文章目录 Python计算机视觉--图像到图像的映射 写在前面 1 单应性变换 1.1 直接线性变换算法 1.2 仿射变换 2 图像扭曲 2.1 图像中的图 ...

  5. 使用 Python 的图像隐写术

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天,世界正在见证前所未有的数据爆炸,我们每天产生的数据量确实令人 ...

  6. Python垂直翻转图像(Vertically Flip Image)

    Python垂直翻转图像(Vertically Flip Image) 目录 Python垂直翻转图像(Vertically Flip Image) #原始图像 #垂直图像翻转

  7. Python为图像添加文本内容(Writing Text on Image)

    Python为图像添加文本内容(Writing Text on Image) #原始图像 #图像添加文本 # from PIL import Image, ImageDraw, ImageFontim ...

  8. Python为图像添加水印(add watermark to an image)

    Python为图像添加水印(add watermark to an image) 目录 Python为图像添加水印(add watermark to an image) #原始图像

  9. python opencv 图像膨胀

    python opencv 图像膨胀 代码: import cv2 import numpy as np # 图像膨胀 def dilate_img(img,a,iterations):kernel ...

最新文章

  1. Annual Review:人与微生物组
  2. 林华达视角-概率图模型与计算机视觉
  3. 在已有SQL 2005 Server 群集中添加节点
  4. js 弹窗并定时关闭
  5. 斯坦佛编程教程-Unix编程工具(五)
  6. 论文浅尝 | Generative QA: Learning to Answer the Whole Question
  7. 获取电脑系统当前时间
  8. 【java学习之路】(javaWeb【后端】篇)005.会话
  9. CCF201812-3 CIDR合并(100分)【位运算+文本】
  10. Ubuntu Linux下安装软件方法
  11. springboot整合PageHelper实现分页效果
  12. 个人学习笔记:路由交换学习思路
  13. 简单实现根据excel表生成sql 建表语句
  14. android 下拉刷新 组件,Android实现简单的下拉刷新控件
  15. c语言中优先级顺序表
  16. 风险偏好情绪有所改善,非美低位反弹
  17. Java之利用Freemarker模板引擎实现代码生成器,提高效率
  18. 人工智能—语音识别技术发展史
  19. electron-vue更新依赖
  20. 【web可视化】canvas画图学习详细教程笔记完整代码

热门文章

  1. HTTP和HTTPS的默认端口号
  2. 最好用的电脑自带的录屏工具软件
  3. 功率型NTC热敏电阻器的选用原则
  4. 时空伴随者--算法模拟(超级简化版)
  5. 博图使用仿真,人机界面与PLC建立连接,出现连接中断问题,连接不上的问题(问题记录)
  6. vue3中使用swiper8 实现缩略图(thumbs的使用)
  7. 【Java基础学习笔记】13、字符串和正则表达式
  8. Qt 6 中的 Qt Extras 模块
  9. 上海字节面试问题及薪资福利
  10. python爬去易车网某地市经销商信息