奥比中光astra_pro相机使用记录
一、信息获取
1、官网
用于了解产品信息
http://www.orbbec.com.cn/sys/37.html
2、开发者社区
- 咨询问题
- 下载开发部https://developer.orbbec.com.cn/
二 、window+vs19
1、相机型号
orbbec_astro_pro
根据对应的型号找到需要的包工具
踩坑1,因为这个相机型号只能使用OpenNI2 SDK库进行开发,orbbec SDk使用的话, 会出现以下问题:
2、使用步骤
1)驱动安装
下载驱动,双击
b)工具安装
作用:
a.用于快速查看相机是否安装正确;
b.可以可视化调整参数和显示效果
3)OpenNI2 SDK 安装
可以直接按照官方的开发手册安装
踩坑2:但是执行时仍然出现运行不了等问题
4)在开发包自带的环境下开发
踩坑3:环境下配置了opencv版本比较多,导致,字符串类型的数据乱码
3、自己开发
1)建立项目
2)配置opencv 头文件,dll ,lib
3) 配置OpenNI2 SDK 头文件 dll,lib
4)构建自己的代码
5)执行效果
6)数据保存
三、代码编写
1 #include<OpenNI.h>
2 #include<iostream>
3 #include<opencv2/opencv.hpp> 4
5 using namespace openni; 6
7 int main() 8 {
9 //1、设备初始化
10 Status sc = OpenNI::initialize();
11 if (sc != STATUS_OK) 12 {
13 printf("Initialize failed\n%s\n", OpenNI::getExtendedError());
14 // return 1; 15 }
16 //2、打开设备
17 Device device;
18 sc = device.open(ANY_DEVICE);
19 if (sc != STATUS_OK) 20 {
21 printf("Couldn't open device\n%s\n", OpenNI::getExtendedError());
22 return 2; 23 }
24 //3、创建深度流
25 VideoStream depthStream;
26 if (device.getSensorInfo(SENSOR_DEPTH) != NULL) 27 {
28 sc = depthStream.create(device, SENSOR_DEPTH);
29 if (sc != STATUS_OK)
30 {
31 printf("Couldn't create depth stream\n%s\n", OpenNI::getExtended 32 }
33 }
34 //配置深度流的模式
35 VideoMode depthMode;
36 depthMode.setResolution(640, 480);
37 depthMode.setPixelFormat(PIXEL_FORMAT_DEPTH_1_MM);
38 depthMode.setFps(30);
39 depthStream.setVideoMode(depthMode);
40 // 打开深度流
41 sc = depthStream.start();
42 if (sc != STATUS_OK)43 {
44
45 }printf("Couldn't start the depth stream\n%s\n", OpenNI::getExtendedE46 //创建数据帧
47 VideoFrameRef depthframe;
48 cv::Mat depth_mat= cv::Mat::zeros(cv::Size(640, 480), CV_8UC1);
49 cv::namedWindow("depth_win", cv::WINDOW_AUTOSIZE);
50 //创建写入视频文件
51 cv::VideoWriter w_depth;
52 //指定保存文件位置,编码器,帧率,宽高
53 w_depth.open("depth.mp4", cv::VideoWriter::fourcc('D', 'I', 'V', 'X'), 3 54
55 //创建伪彩色
56 cv::Mat falseColorsMap_mat;
57 cv::namedWindow("falseColorsMap_win", cv::WINDOW_AUTOSIZE);
58 //创建写入视频文件
59 cv::VideoWriter w_falseColorsMap;
60 //指定保存文件位置,编码器,帧率,宽高
61 w_falseColorsMap.open("depth.mp4", cv::VideoWriter::fourcc('D', 'I', 'V' 62
63
64 //3.1 创建近红外流
65 VideoStream ir_Stream;
66 if (device.getSensorInfo(SENSOR_IR)!=NULL) 67 {
68 sc = ir_Stream.create(device, SENSOR_IR);
69 if (sc != STATUS_OK)
70 {
71 printf("Couldn't create depth stream\n%s\n", OpenNI::getExtended 72 }
73 }
74 //配置近红外的模式
75 VideoMode ir_Mode;
76 ir_Mode.setResolution(640, 480);
77 ir_Mode.setFps(30);
78 ir_Stream.setVideoMode(ir_Mode); 79
80 // 打开近红外流
81 sc = ir_Stream.start();
82 if (sc != STATUS_OK) 83 {
84 printf("Couldn't start the ir stream\n%s\n", OpenNI::getExtendedErro 85 }86 //创建数据帧
87 VideoFrameRef ir_frame;
88 cv::Mat ir_mat=cv::Mat::zeros(cv::Size(640, 480), CV_8UC1);;
89 cv::namedWindow("ir_win", cv::WINDOW_AUTOSIZE);
90 //创建写入视频文件
91 cv::VideoWriter w_ir;
92 //指定保存文件位置,编码器,帧率,宽高
93 w_ir.open("ir.mp4", cv::VideoWriter::fourcc('D', 'I', 'V', 'X'), 30, cv: 94
95 //3.2 创建彩色图流
96 cv::VideoCapture cap;
97 cap.open(1);
98 if (!cap.isOpened()) 99 {
100 printf("could not load video data...\n");
101 return -1;
102 }
103 int frames = cap.get(cv::CAP_PROP_FRAME_COUNT);
104 double fps = cap.get(cv::CAP_PROP_FPS);//获取每针视频的频率
105 // 获取帧的视频宽度,视频高度
106 cv::Size size = cv::Size(cap.get(cv::CAP_PROP_FRAME_WIDTH), cap.get(cv::
107 std::cout << frames << std::endl;
108 std::cout << fps << std::endl;
109 std::cout << size << std::endl;
110 cv::Mat color_mat;
111 cv::namedWindow("color_win", cv::WINDOW_AUTOSIZE);
112 //创建写入视频文件
113 cv::VideoWriter w_color;
114 //指定保存文件位置,编码器,帧率,宽高
115 w_color.open("color.mp4", cv::VideoWriter::fourcc('D', 'I', 'V', 'X'), 3 116
117
118 while (true)
119 {
120 //4 创建深度流指针
121 VideoStream* p_depth_stream = &depthStream;
122 int changedDepthStreamDummy;
123 //等待一帧
124 Status sc_depth = OpenNI::waitForAnyStream(&p_depth_stream, 1, &chan
125 if (sc_depth != STATUS_OK)
126 {
127 continue;
128 }129 //获取深度帧数据
130 sc_depth = depthStream.readFrame(&depthframe);
131 if (sc_depth == STATUS_OK)
132 {
133 auto depth = depthframe.getData();
134 auto depthWidth = depthframe.getWidth();
135 auto depthHeight = depthframe.getHeight();
136 int len = depthframe.getDataSize();
137 //std::cout << len << std::endl;
138 //处理并渲染深度帧数据
139 cv::Mat rawMat(depthHeight, depthWidth, CV_16UC1, (void*)depth); 140
141 cv::normalize(rawMat, depth_mat, 0, 255, cv::NORM_MINMAX,CV_8UC1
142 double min;
143 double max;
144 int maxIDX;
145 int minIDX;
146 cv::minMaxIdx(rawMat, &min, &max, &minIDX, &maxIDX);
147 float scale = 255.0 / (max - min);
148 rawMat.convertTo(depth_mat, CV_8UC1, scale, -min * scale);
149 cv::imshow("depth_win", depth_mat);
150 w_depth << depth_mat; 151
152 applyColorMap(depth_mat, falseColorsMap_mat, cv::COLORMAP_JET);
153 cv::imshow("falseColorsMap_win", falseColorsMap_mat);
154 w_depth << falseColorsMap_mat;
155 }
156
157 //4.1创建近红外流指针
158 VideoStream* p_ir_stream = &ir_Stream;
159 int changedIrStreamDummy;
160 //等待一帧
161 Status sc_ir = OpenNI::waitForAnyStream(&p_ir_stream, 1, &changedIrS
162 if (sc_ir != STATUS_OK)
163 {
164 continue;
165 }
166 //获取近红外数据
167 sc_ir = ir_Stream.readFrame(&ir_frame);
168 if (sc_ir == STATUS_OK)
169 {
170 auto depth = ir_frame.getData();
171 auto ir_Width = ir_frame.getWidth();172
173
174
175 auto ir_Height = ir_frame.getHeight();//处理并渲染深度帧数据
cv::Mat rawMat(ir_Height, ir_Width, CV_16UC1, (void*)depth);
176 cv::normalize(rawMat, ir_mat, 0, 255, cv::NORM_MINMAX, CV_8UC1);
177 //rawMat.convertTo(ir_mat, CV_8UC1);
178 cv::imshow("ir_win", ir_mat);
179 w_ir << ir_mat;
180 }
181
182 //4.2读取彩色流
183 cap >> color_mat;
184 if (color_mat.empty())
185 {
186 break;
187 }
188 cv::imshow("color_win", color_mat);
189 w_color << color_mat;
190 //在视频播放期间按键退出
191 if (cv::waitKey(33) >= 0) break;
192 }
193
194 depthStream.stop();
195 depthStream.destroy();
196 ir_Stream.stop();
197 ir_Stream.destroy();
198 device.close();
199 OpenNI::shutdown();
200
201 cap.release();
202 return 0;
203 }
相关文章:

奥比中光astra_pro相机使用记录
一、信息获取 1、官网 用于了解产品信息 http://www.orbbec.com.cn/sys/37.html 2、开发者社区 咨询问题下载开发部https://developer.orbbec.com.cn/ 二 、windowvs19 1、相机型号 orbbec_astro_pro 根据对应的型号找到需要的包工具 踩坑1,因为这个相机型号…...

【MindSpore学习打卡】应用实践-计算机视觉-深入解析 Vision Transformer(ViT):从原理到实践
在近年来的深度学习领域,Transformer模型凭借其在自然语言处理(NLP)中的卓越表现,迅速成为研究热点。尤其是基于自注意力(Self-Attention)机制的模型,更是推动了NLP的飞速发展。然而,…...
Debezium系列之:支持在一个数据库connector采集中过滤某些表的删除事件
Debezium系列之:支持在一个数据库connector采集中过滤某些表的删除事件 一、需求二、相关技术三、参数设置四、消费数据一、需求 在一个数据库的connector中采集了多张表,部分表存在数据归档的业务场景,会定期从表中删除历史数据,希望能过滤掉存在数据归档这些表的删除事件…...
SQL Server端口配置指南:最佳实践与技巧
1. 引言 SQL Server通常使用默认端口1433进行通信。为了提高安全性和性能,正确配置SQL Server的端口非常重要。本指南将帮助您了解如何配置和优化SQL Server的端口设置,以满足不同环境和需求。 2. 端口配置基础 2.1 默认端口 SQL Server的默认端口是…...
FastGPT 报错:undefined 该令牌无权使用模型:gpt-3.5-turbo (request id: xxx)
目录 一、FastGPT 报错 二、解决方法 一、FastGPT 报错 进行对话时 FastGPT 报错如下所示。 [Error] 2024-07-01 09:25:23 sse error: undefined 该令牌无权使用模型:gpt-3.5-turbo (request id: xxxxx) {message: 403 该令牌无权使用模型:gpt-3.5-turbo (request id: x…...

springboot系列八: springboot静态资源访问,Rest风格请求处理, 接收参数相关注解
文章目录 WEB开发-静态资源访问官方文档基本介绍快速入门注意事项和细节 Rest风格请求处理基本介绍应用实例注意事项和细节思考题 接收参数相关注解基本介绍应用实例PathVariableRequestHeaderRequestParamCookieValueRequestBodyRequestAttributeSessionAttribute ⬅️ 上一篇…...

# 职场生活之道:善于团结
在职场这个大舞台上,每个人都是演员,也是观众。要想在这个舞台上站稳脚跟,除了专业技能,更要学会如何与人相处,如何团结他人。团结,是职场生存的重要法则之一。 1. 主动团结:多一个朋友&#x…...

go sync包(五) WaitGroup
WaitGroup sync.WaitGroup 可以等待一组 Goroutine 的返回,一个比较常见的使用场景是批量发出 RPC 或者 HTTP 请求: requests : []*Request{...} wg : &sync.WaitGroup{} wg.Add(len(requests))for _, request : range requests {go func(r *Reque…...
基于深度学习的相机内参标定
基于深度学习的相机内参标定 相机内参标定(Camera Intrinsic Calibration)是计算机视觉中的关键步骤,用于确定相机的内部参数(如焦距、主点位置、畸变系数等)。传统的标定方法依赖于已知尺寸的标定板,通常…...

适合金融行业的国产传输软件应该是怎样的?
对于金融行业来说,正常业务开展离不开文件传输场景,一般来说,金融行业常用的文件传输工具有IM通讯、邮件、自建文件传输系统、FTP应用、U盘等,这些传输工具可以基础实现金融机构的文件传输需求,但也存在如下问题&#…...

昇思25天学习打卡营第9天|MindSpore使用静态图加速(基于context的开启方式)
在Graph模式下,Python代码并不是由Python解释器去执行,而是将代码编译成静态计算图,然后执行静态计算图。 在静态图模式下,MindSpore通过源码转换的方式,将Python的源码转换成中间表达IR(Intermediate Repr…...

class类和style内联样式的绑定
这里的绑定其实就是v-bind的绑定,如代码所示,div后面的引号就是v-bind绑定,然后大括号将整个对象括起来,对象内先是属性,属性后接的是变量,这个变量是定义在script中的,后通过这个变量ÿ…...

3033.力扣每日一题7/5 Java
博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先创建一个与…...

GPT-5:下一代AI如何彻底改变我们的未来
GPT-5 发布前瞻:技术突破与未来展望 随着科技的飞速发展,人工智能领域不断迎来新的突破。根据最新消息,OpenAI 的首席技术官米拉穆拉蒂在一次采访中确认,GPT-5 将在一年半后发布,并描述了其从 GPT-4 到 GPT-5 的飞跃如…...

重载一元运算符
自增运算符 #include<iostream> using namespace std; class CGirl { public:string name;int ranking;CGirl() { name "zhongge"; ranking 5; }void show() const{ cout << "name : "<<name << " , ranking : " <…...

10元 DIY 一个柔性灯丝氛围灯
之前TikTok上特别火的线性氛围灯Augelight刚出来的时候一度卖到80多美金,国内1688也能到400多人民币。 随着各路国内厂商和DIY创客的跟进,功能变多的同时价格一路下滑,虽然有的质感的确感人,但是便宜啊。 甚至关注的up有把成本搞到…...

表单自定义组件 - 可选择卡片SelectCard
import React from react; import styles from ./index.module.less;type OptionsType {/*** 每个item渲染一行,第0项为标题*/labels?: any[];/*** 自定义渲染内容*/label?: string | React.ReactNode;value: any; }; interface IProps {value?: any;onChange?…...

Ubuntu / Debian安装FTP服务
本章教程,记录在Ubuntu中安装FTP服务的具体步骤。FTP默认端口:21 1、安装 pure-ftpd sudo apt-get install pure-ftpd2、修改默认配置 # 与 centos 不同,这里需要在 /etc/pure-ftpd/conf 文件夹下执行下列命令,增加对应配置文件: # 创建 /etc/pure-ftpd/conf/PureDB 文件…...

若依 Vue 前端分离 3.8.8 版中生成的前端代码中关于下拉框只有下拉箭头的问题
生成代码修改前 <el-form-item label"课程学科" prop"subject"><el-select v-model"queryParams.subject" placeholder"请选择课程学科" clearable><el-optionv-for"dict in course_subject":key"dict…...
C++把一个类封装成动态链接库
一、步骤 1. 创建类头文件 首先,定义你要封装的类。例如,创建一个名为MyClass的类: // MyClass.h #pragma once#ifdef MYCLASS_EXPORTS #define MYCLASS_API __declspec(dllexport) #else #define MYCLASS_API __declspec(dllimport) #end…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...