OpenCV使用 Kinect 和其他兼容 OpenNI 的深度传感器(75)

news2025/1/11 0:44:50
 返回:OpenCV系列文章目录(持续更新中......)
上一篇:使用 OpenCV 创建视频(74)
下一篇 :OpenCV系列文章目录(持续更新中......)

目的:​

通过 VideoCapture 类支持与 OpenNI 兼容的深度传感器(Kinect、XtionPRO 等)。深度图、BGR图像和一些其他格式的输出可以通过使用熟悉的VideoCapture界面进行检索。

为了将深度传感器与 OpenCV 一起使用,您应该执行以下初步步骤:

  1. 安装OpenNI库(从这里 Apple)和PrimeSensor模块(从这里 GitHub - avin2/SensorKinect: PrimeSensor Modules for OpenNI)。安装应对这些产品说明中列出的默认文件夹进行,例如:
  1. OpenNI:
     Linux & MacOSX:
     Libs into: /usr/lib
     Includes into: /usr/include/ni
     Windows:
     Libs into: c:/Program Files/OpenNI/Lib
     Includes into: c:/Program Files/OpenNI/Include
    PrimeSensor Module:
     Linux & MacOSX:
     Bins into: /usr/bin
     Windows:
     Bins into: c:/Program Files/Prime Sense/Sensor/Bin

  2. 如果一个或两个产品都安装到其他文件夹,则用户应更改相应的 CMake 变量 OPENNI_LIB_DIR、OPENNI_INCLUDE_DIR 或/和 OPENNI_PRIME_SENSOR_MODULE_BIN_DIR。
  3. 通过在 CMake 中设置 WITH_OPENNI 标志来配置支持 OpenNI 的 OpenCV。如果在安装文件夹中找到 OpenNI,则 OpenCV 将使用 OpenNI 库构建(请参阅 CMake 日志中的 OpenNI 状态),而找不到 PrimeSensor 模块(参见 CMake 日志中的 OpenNI PrimeSensor 模块状态)。如果没有PrimeSensor模块,OpenCV将使用OpenNI库成功编译,但VideoCapture对象不会从Kinect传感器抓取数据。
  4. 构建 OpenCV。

VideoCapture 可以检索以下数据:

  1. 深度生成器给出的数据:
    • CAP_OPENNI_DEPTH_MAP - 深度值,单位为 mm (CV_16UC1)
    • CAP_OPENNI_POINT_CLOUD_MAP - XYZ,单位为米 (CV_32FC3)
    • CAP_OPENNI_DISPARITY_MAP - 像素差异 (CV_8UC1)
    • CAP_OPENNI_DISPARITY_MAP_32F - 像素视差 (CV_32FC1)
    • CAP_OPENNI_VALID_DEPTH_MASK - 有效像素的遮罩(未遮挡、未阴影等)(CV_8UC1)
  2. BGR 图像生成器给出的数据:
    • CAP_OPENNI_BGR_IMAGE - 彩色图像 (CV_8UC3)
    • CAP_OPENNI_GRAY_IMAGE - 灰色图像 (CV_8UC1)

为了从深度传感器获取深度图,请使用 VideoCapture::operator >>,例如:

VideoCapture capture( CAP_OPENNI );
for(;;)
{
 Mat depthMap;
 capture >> depthMap;
 
 if( waitKey( 30 ) >= 0 )
 break;
}

要获取多个数据映射,请使用 VideoCapture::grab 和 VideoCapture::retrieve,例如:

VideoCapture capture(0); // or CAP_OPENNI
for(;;)
{
 Mat depthMap;
 Mat bgrImage;
 
 capture.grab();
 
 capture.retrieve( depthMap, CAP_OPENNI_DEPTH_MAP );
 capture.retrieve( bgrImage, CAP_OPENNI_BGR_IMAGE );
 
 if( waitKey( 30 ) >= 0 )
 break;
}

为了设置和获取传感器数据生成器的某些属性,请分别使用 VideoCapture::set 和 VideoCapture::get 方法,例如:

VideoCapture capture( CAP_OPENNI );
capture.set( CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE, CAP_OPENNI_VGA_30HZ );
cout << "FPS " << capture.get( CAP_OPENNI_IMAGE_GENERATOR+CAP_PROP_FPS ) << endl;

由于支持两种类型的传感器数据生成器(图像生成器和深度生成器),因此应使用两个标志来设置/获取所需生成器的属性:

  • CAP_OPENNI_IMAGE_GENERATOR – 用于访问图像生成器属性的标志。
  • CAP_OPENNI_DEPTH_GENERATOR – 用于访问深度生成器属性的标志。默认情况下,如果未设置属性的两个可能值,则假定此标志值。

某些深度传感器(例如XtionPRO)没有图像发生器。为了检查它,您可以获得CAP_OPENNI_IMAGE_GENERATOR_PRESENT财产

bool isImageGeneratorPresent = capture.get( CAP_PROP_OPENNI_IMAGE_GENERATOR_PRESENT ) != 0; // or == 1

指定所需生成器类型的标志必须与特定的生成器属性结合使用。支持通过OpenNI接口提供的相机的以下属性:

  • 对于图像生成器:
    • CAP_PROP_OPENNI_OUTPUT_MODE – 支持三种输出模式:默认使用CAP_OPENNI_VGA_30HZ(图像生成器以 30 FPS 返回 VGA 分辨率的图像)、CAP_OPENNI_SXGA_15HZ(图像生成器以 15 FPS 返回 SXGA 分辨率的图像)和 CAP_OPENNI_SXGA_30HZ(图像生成器以 30 FPS 返回 SXGA 分辨率的图像, 该模式由XtionPRO Live支持);深度发生器的地图始终采用 VGA 分辨率。
  • 对于深度发生器:
    • CAP_PROP_OPENNI_REGISTRATION – 通过更改深度生成器的视点(如果标志为“打开”)或将此视点设置为其正常视点(如果标志为“关闭”)来将重新映射深度图注册为图像图的标志。配准过程生成的图像是像素对齐的,这意味着图像中的每个像素都与深度图像中的像素对齐。

      接下来的属性仅供获取:

    • CAP_PROP_OPENNI_FRAME_MAX_DEPTH – Kinect 的最大支持深度(以毫米为单位)。
    • CAP_PROP_OPENNI_BASELINE – 基线值(毫米)。
    • CAP_PROP_OPENNI_FOCAL_LENGTH – 以像素为单位的焦距。
    • CAP_PROP_FRAME_WIDTH – 以像素为单位的帧宽。
    • CAP_PROP_FRAME_HEIGHT – 以像素为单位的帧高。
    • CAP_PROP_FPS – 帧速率(以 FPS 为单位)。
  • 一些典型的标志组合“生成器类型 + 属性”被定义为单个标志:
    • CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE = CAP_OPENNI_IMAGE_GENERATOR + CAP_PROP_OPENNI_OUTPUT_MODE
    • CAP_OPENNI_DEPTH_GENERATOR_BASELINE = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_BASELINE
    • CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_FOCAL_LENGTH
    • CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION = CAP_OPENNI_DEPTH_GENERATOR + CAP_PROP_OPENNI_REGISTRATION

有关详细信息,请参阅 opencv/samples/cpp 文件夹中的用法videocapture_openni.cpp示例。


参考文献:

1、《Using Kinect and other OpenNI compatible depth sensors》

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

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

相关文章

Ps 滤镜:纤维

Ps菜单&#xff1a;滤镜/渲染/纤维 Filter/Render/Fibers 纤维 Fibers滤镜可以创建类似于纤维或织物的纹理效果&#xff0c;用于模拟自然或合成材料的质感和外观。 “纤维”滤镜使用前景色和背景色来生成纤维效果&#xff0c;通过算法模拟纤维束的编织或交织。“差异”滑块允许…

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法 问题截图&#xff1a; 亲测有效的方法 方法一&#xff1a; 选择通过uniapp的开发工具Hbuilder来进行在线打包&#xff0c;取消默认勾选的以下选项。 然后进行在线打包就不会存在提交审…

怎么在家访问公司内网?

在当前的疫情情况下&#xff0c;越来越多的公司开始允许员工在家办公&#xff0c;这就需要解决一个问题&#xff1a;如何在家访问公司的内网资源呢&#xff1f;今天我将介绍一种解决方案——使用【天联】组网&#xff0c;它具有许多优势。 【天联】组网的优势 无网络限制&#…

Unity 性能优化之UI和模型优化(九)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、选择UI二、UGUI的优化1.Raycast Target2.UI控件的重叠3.TextMeshPro 二、模型优化1.Model选项卡Mesh CompressionRead/Write Enabled设置Optimize Ga…

「Dasha and Photos」Solution

简述题意 给定一个 n m n \times m nm 的方格&#xff0c;每个格子里有一个小写英文字母。 现在你有 k k k 个 n m n \times m nm 的方格&#xff0c;这些方格都是给定方格的基础上将左上角为 ( a i , b i ) (a_i,b_i) (ai​,bi​)&#xff0c;右下角为 ( c i , d i ) …

AI原生实践:测试用例创作探索

测试用例作为质量保障的核心&#xff0c;影响着研发-测试-发布-上线的全过程&#xff0c;如单元测试用例、手工测试用例、接口自动化用例、UI 自动化用例等&#xff0c;但用例撰写的高成本尤其是自动化用例&#xff0c;导致了用例的可持续积累、更新和迭代受到非常大制约。长久…

深入理解Java虚拟机(JVM)

引言&#xff1a; Java虚拟机&#xff08;JVM&#xff09;是Java平台的核心组件&#xff0c;它负责将Java字节码转换成平台特定的机器指令&#xff0c;并在相应的硬件和操作系统上执行。JVM的引入使得Java语言具有“一次编写&#xff0c;到处运行”的跨平台特性。本文将深入探…

安装nginx-1.25.5与ngx_http_headers_more_filter_module模块

#下载nginx的代码 curl -O http://nginx.org/download/nginx-1.25.5.tar.gz #下载headers-more-nginx-module代码 git clone https://github.com/openresty/headers-more-nginx-module#解压 tar -xzf nginx-1.25.5.tar.gzcd nginx-1.25.5#--add-dynamic-module 下载下来的目录 …

简单两步将Lllama、Qwen等开源大模型安装到自己的电脑上

现在已经有非常多优秀的开源大语言模型了&#xff0c;比如Command R、Mistral、Qwen、MiniMax、Baichuan、Phi3等&#xff0c;其中Lllama3和Qwen等已经和GPT4的性能比较接近了。 如果能把这些免费的开源大模型部署到本地电脑或手机上&#xff0c;可以完全自由的使用&#xff0…

前后端分离项目中的一些疑惑

1、前后端分离项目&#xff0c;浏览器发起请求后&#xff0c;请求的是前端服务器还是后端服务器&#xff1f; 在前后端分离的项目中&#xff0c;当浏览器发起请求时&#xff0c;它首先会请求的是前端服务器。 前后端分离的工作流程大致如下&#xff1a; 用户在浏览器中输入网…

[Algorithm][多源BFS][矩阵][飞地的数量][地图中的最高点][地图分析] + 多源BFS原理讲解 详细讲解

目录 0.原理讲解1.矩阵1.题目链接2.算法原理详解3.代码实现 2.飞地的数量1.题目链接2.算法原理详解3.代码实现 3.地图中的最高点1.题目链接2.算法原理详解3.代码实现 4.地图分析1.题目链接2.算法原理详解3.代码实现 0.原理讲解 注意&#xff1a;只要是用**BFS解决的最短路径问题…

淘宝数据分析——Python爬虫模式♥

大数据时代&#xff0c; 数据收集不仅是科学研究的基石&#xff0c; 更是企业决策的关键。 然而&#xff0c;如何高效地收集数据 成了摆在我们面前的一项重要任务。 本文将为你揭示&#xff0c; 一系列实时数据采集方法&#xff0c; 助你在信息洪流中&#xff0c; 找到…

每日OJ题_贪心算法三③_力扣45. 跳跃游戏 II(dp解法+贪心解法)

目录 力扣45. 跳跃游戏 II 解析代码1_动态规划 解析代码2_贪心 力扣45. 跳跃游戏 II 45. 跳跃游戏 II 难度 中等 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 num…

如何设置ddns动态域名服务实现外网访问

在本地搭建好服务器&#xff0c;部署好web网站或其他应用后&#xff0c;需要在外网访问内网时&#xff0c;如何设置动态域名服务ddns&#xff0c;将主机的内网IP端口映射到外网访问&#xff0c;是我们需要面对的一个重要步骤。 内网发布外网&#xff0c;常见的有两种方案&…

C语言程序设计(三)

1、数据的两种表现形式 常量&#xff1a;其值不能被改变的量称为常量。 变量&#xff1a; 单撇号内只能包含一个字符。双撇号内可以包含一个字符串。 注意&#xff1a;要区分符号常量和变量,不要把符号常量误认为变量。符号常量不占内存只是一个临时符号,代表一个值,在预编译…

QT和Halcon联合编程--注意是Ubuntu--

1.在QT目录下面的.pro文件下&#xff0c;如图所示&#xff1a; 根据你电脑的haclon的安装路径&#xff0c;添加如下代码&#xff1a; INCLUDEPATH /opt/halcon/include LIBS -L/opt/halcon/lib/x64-linux -lhalconcpp 需要等待一下&#xff0c;QT需要进行加载 2.在头文件中…

【综述】碳达峰、碳中和、碳足迹

文章目录 概念定义 碳足迹计算 动力蓄电池碳足迹 服务应用 参考资料 概念定义 温室气体&#xff0c;大气层中自然存在的和由于人类活动产生的能够吸收和散发由地球表面、大气层和云层所产生的、波长在红外光谱内的辐射的气态成分。包括二氧化碳&#xff08;CO2&#xff09…

HIVE简单数据查询

HIVE简单数据查询 1.where WHERE 过滤条件 between/ in / is NULL / IS NOT NULL / > < ! ... 如果多个存在多个过滤条件 可以用 AND OR 进行条件关联 或者是用NOT 进行条件结果取反 2.JOIN JOIN 内连接 左外连接 右外连接 自连接 满连接…

Unity 性能优化之LOD技术(十)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 LOD技术效果一、LOD技术是什么&#xff1f;二、LODGroup组件介绍三、LODGroup组件使用步骤添加组件添加模型 四、Project Settings中与LOD组件相关参数总结 L…

视觉图像信息处理与FPGA实现第九次作业——直方图均衡

RAM的B站视频解析 RAM的文档 一、65536x8位的单端口RAM timescale 1ns / 1ps //SPRF Single Port Read/Write Function //65535 是RAM中总的字数&#xff0c;也就是存储深度&#xff0c;X8表示每个字是8位的 module SPRF65536X8(Q,CLK,CEN,WEN,A,D );//输出寄存器Qoutput [7…