OpenCV-Python(45):立体图像中的深度地图

基础

        在OpenCV中,深度地图通常是通过计算立体视觉(stereo vision)或结构光(structured light)技术得到的。立体视觉是通过将两个或多个摄像机(或图像)的视角结合起来,计算物体的深度信息。而结构光技术则是通过投射特定的光纹或模式到场景中,然后通过观察光纹的形变来计算物体的深度。通过学习和了解了对极约束的基本概念和相关术语后。我们可以确定,如果同一场景有两幅图像的话我们在直觉上就可以获得图像的深度信息。下面的这幅图和其中的数学公式可以证明我们的直觉是对的。

        x 和x' 分别是图像中的点到3D 空间中的点和到摄像机中心的距离。B 是这两个摄像机之间的距离,f 是摄像机的焦距。上面的等式告诉我们点的深度与x 和x' 的差成反比。所以根据这个等式我们就可以得到图像中所有点的深度图。这样就可以找到两幅图像中的匹配点了。前面我们已经知道了对极约束可以使这个操作更快更准。一旦找到了匹配就可以计算出disparity 了。让我们看看在OpenCV 中怎样做吧。 

代码

在OpenCV中,可以使用以下函数来生成深度地图:

1.cv2.StereoBM_create()cv2.StereoSGBM_create():这些函数用于执行立体匹配算法,从而计算出左右摄像机间的视差图。然后,可以使用视差图计算深度地图。

2.cv2.reprojectImageTo3D():这个函数可以将视差图转换为三维点云,其中每个点的坐标表示其在世界坐标系中的位置。

3.cv2.createStructuredLight()cv2.unwrapPhaseMap()cv2.reconstructPhaseMap():这些函数用于处理结构光图像,从而计算出物体的深度地图。

下面的代码显示了构建深度图的简单过程:

import numpy as np
import cv2
from matplotlib import pyplot as plt
imgL = cv2.imread('tsukuba_l.png',0)
imgR = cv2.imread('tsukuba_r.png',0)
stereo = cv2.createStereoBM(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()

        下图左侧为原始图像,右侧为深度图像。如图所示,结果中有很大的噪音。通过调整numDisparities 和blockSize 的值,我们会得到更好的结果。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka 的架构

实验过程 1.三个虚拟机中解压kafka软件包 tar -zxvf kafka_2.11-1.1.1.tgz 2.修改 3 个节点配置文件 在 zookeeper 节点,进入 kafka_2.11-1.1.1/config 目录下,编辑 server.properties 文件 [rootdb1 ~]# cd kafka_2.11-1.1.1/config [rootdb1 con…

智能路由器 端口映射 (UPnP) Padavan内网端口映射配置方法

新版本Padavan 4.4内核的端口映射配置和老版本的不太一样,因为新版本默认是启用的 UPnP端口映射, 同时默认使用的是 IGD UPnP自动端口映射, UPnP名词解释: UPnP通用即插即用,是一组协议的统称,是一种基于TCP/IP、UDP和HTTP的分布式、开放体系&#xff…

P9847 [ICPC2021 Nanjing R] Crystalfly 题解 (SPJ)

[ICPC2021 Nanjing R] Crystalfly 传送门? 题面翻译 给定一个 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le10^5) n(1≤n≤105) 个节点的树,每个节点上有 a i a_i ai​ 只晶蝶。派蒙最初在 1 1 1 号节点,并获得 1 1 1 号节点的所有晶蝶&#xf…

Java设计模式之策略模式详解

Java设计模式之策略模式详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同踏入Java设计模式之策略模式的世界,探讨代码中的…

NetSuite学习笔记 - 中心

一、什么是中心? 对于每个用户,NetSuite 会根据用户的指定角色显示一组可变的标签页面,称为中心。通俗来讲呢,NetSuite的中心其实就是我们常说的“导航菜单”。 只是在我过去常见的系统中,导航菜单一般都是固定的&am…

Elasticsearch Windows部署-ELK技术栈

1、下载Elasticsearch、kibana、logstash 本文不介绍ELK相关原理知识,只记录部署操作过程 下载地址Past Releases of Elastic Stack Software | Elastic 选择同一版本,这里选择是当前最新版本8.11.3 解压放在同目录下,方便后续操作与使用 …

python 创建虚拟环境

为啥需要创建虚拟环境 在ubuntu直接pip安装的错误,规避自己安装的包与系统使用包之间的冲突 ➜ ~ pip3 install fastapi error: externally-managed-environment This environment is externally managed ╰─> To install Python packages system-wide, try a…

GPT实战系列-实战Qwen在Cuda 12+24G部署方案

GPT实战系列-实战Qwen在Cuda1224G部署方案 ChatGLM4进行新闻发布,但还没有开源更新,在此之际,实战部署测试Qwen大模型。目前Qwen的口碑貌似还不错,测试显卡内存24G,毕竟有限,排除了Qwen14非量化方案Qwen-1…

浅入浅出Spring架构设计

浅入浅出Spring架构设计 前言 为什么需要Spring? 什么是Spring? 对于这样的问题,大部分人都是处于一种朦朦胧胧的状态,说的出来,但又不是完全说的出来,今天我们就以架构设计的角度尝试解开Spring的神秘面纱。 本篇文章以由浅…

RK3566 linux加入uvc app

SDK中external/uvc_app/目录提供了将板卡模拟成uvc camera的功能。 一、buildroot使能uvc_app 1、进入到buildroot目录 在sdk目录下执行以下命令: cd buildroot 2、选择defconfig 执行命令: source build/envsetup.sh 输入数字然后回车选择板卡&…

【Vue3】3-4 : 组件的属性与事件是如何进行处理的

有时候组件上的属性或事件并不想进行组件通信,那么Vue是如何处理的呢? 组件的属性与事件 默认不通过props接收的话,属性会直接挂载到组件容器上,事件也是如此,会直接挂载到组件容器上。可通过 inheritAttrs 选项阻止…

Java中Redis常用的20个方法

开头语: 大家好!欢迎来到本篇博客,今天我们将探讨Java中Redis的常用方法。作为一种强大的缓存和数据存储工具,Redis在Java应用中扮演着重要的角色。我们将介绍20个常用的Redis方法,希望对大家在Java开发中更好地使用R…

两数之和(Hash表)[简单]

优质博文:IT-BLOG-CN 一、题目 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出"和"为目标值target的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元…

HC小区管理系统商用测试用例

HC小区管理系统商用测试用例 说明 HC小区管理系统商用之前,必须要经过严格的测试,可能因为环境差异,以及配置差异等导致生产环境不稳定,或者存在系统bug。 1.1、操作视频 hc_java110的个人空间-hc_java110个人主页-哔哩哔哩视…

Spark—shell,Hbase—shell

Spark: SPARK SQL results spark.sql( "SELECT * FROM people") //读取JSON文件 val userScoreDF spark.read.json("hdfs://master:9000/people.json") Spark内置函数的使用 除select()外,还可以使用filter()、groupBy()等方…

工具推荐 |Devv.ai — 最懂程序员的新一代 AI 搜索引擎

介绍 伴随 GPT 的出现,我们可以看到越来越多的 AI 产品,其中也不乏针对程序员做的代码生成工具。 今天介绍的这款产品是一款针对中文开发者的 AI 搜索引擎,Devv.ai 使用 Devv.ai 的使用非常简单,就是传统的搜索场景&#xff…

pexpect中interact模式的坑

截止写这篇博文为止,根据官方文档,调用interact模式时需要将logfile设置为None,否则日志会在终端显示两次(logfile_read一次,logfile一次),将logfile_read或者logfile_send设置为None是无效的&a…

JVM:类加载机制

JVM:类加载机制 1. 什么是类加载机制2. 类加载的过程(生命周期)2.1 加载2.2 校验(验证)2.3 准备2.n 六种情况对类进行“初始化” 1. 什么是类加载机制 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析…

数字化赋能TPM:开启智能生产新篇章

随着科技的快速发展,数字化已经成为企业提升生产效率、优化管理的重要手段。对于设备密集型的制造业而言,传统的TPM(全员生产维护)方式已经难以满足现代生产的需求。如何将数字化技术与TPM相结合,赋能TPM,提…

机器学习:线性回归模型的原理、应用及优缺点

一、原理 线性回归是一种统计学和机器学习中常用的方法,用于建立变量之间线性关系的模型。其原理基于假设因变量(或响应变量)与自变量之间存在线性关系。 下面是线性回归模型的基本原理: 模型拟合: 通过最小二乘法&…