当前位置: 首页 > news >正文

奥比中光astra_pro相机使用记录

一、信息获取

1、官网

用于了解产品信息

http://www.orbbec.com.cn/sys/37.html

2、开发者社区

  1. 咨询问题
  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&#xff0c;因为这个相机型号…...

【MindSpore学习打卡】应用实践-计算机视觉-深入解析 Vision Transformer(ViT):从原理到实践

在近年来的深度学习领域&#xff0c;Transformer模型凭借其在自然语言处理&#xff08;NLP&#xff09;中的卓越表现&#xff0c;迅速成为研究热点。尤其是基于自注意力&#xff08;Self-Attention&#xff09;机制的模型&#xff0c;更是推动了NLP的飞速发展。然而&#xff0c…...

Debezium系列之:支持在一个数据库connector采集中过滤某些表的删除事件

Debezium系列之:支持在一个数据库connector采集中过滤某些表的删除事件 一、需求二、相关技术三、参数设置四、消费数据一、需求 在一个数据库的connector中采集了多张表,部分表存在数据归档的业务场景,会定期从表中删除历史数据,希望能过滤掉存在数据归档这些表的删除事件…...

SQL Server端口配置指南:最佳实践与技巧

1. 引言 SQL Server通常使用默认端口1433进行通信。为了提高安全性和性能&#xff0c;正确配置SQL Server的端口非常重要。本指南将帮助您了解如何配置和优化SQL Server的端口设置&#xff0c;以满足不同环境和需求。 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 ⬅️ 上一篇…...

# 职场生活之道:善于团结

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

go sync包(五) WaitGroup

WaitGroup sync.WaitGroup 可以等待一组 Goroutine 的返回&#xff0c;一个比较常见的使用场景是批量发出 RPC 或者 HTTP 请求&#xff1a; requests : []*Request{...} wg : &sync.WaitGroup{} wg.Add(len(requests))for _, request : range requests {go func(r *Reque…...

基于深度学习的相机内参标定

基于深度学习的相机内参标定 相机内参标定&#xff08;Camera Intrinsic Calibration&#xff09;是计算机视觉中的关键步骤&#xff0c;用于确定相机的内部参数&#xff08;如焦距、主点位置、畸变系数等&#xff09;。传统的标定方法依赖于已知尺寸的标定板&#xff0c;通常…...

适合金融行业的国产传输软件应该是怎样的?

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

昇思25天学习打卡营第9天|MindSpore使用静态图加速(基于context的开启方式)

在Graph模式下&#xff0c;Python代码并不是由Python解释器去执行&#xff0c;而是将代码编译成静态计算图&#xff0c;然后执行静态计算图。 在静态图模式下&#xff0c;MindSpore通过源码转换的方式&#xff0c;将Python的源码转换成中间表达IR&#xff08;Intermediate Repr…...

class类和style内联样式的绑定

这里的绑定其实就是v-bind的绑定&#xff0c;如代码所示&#xff0c;div后面的引号就是v-bind绑定&#xff0c;然后大括号将整个对象括起来&#xff0c;对象内先是属性&#xff0c;属性后接的是变量&#xff0c;这个变量是定义在script中的&#xff0c;后通过这个变量&#xff…...

3033.力扣每日一题7/5 Java

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

GPT-5:下一代AI如何彻底改变我们的未来

GPT-5 发布前瞻&#xff1a;技术突破与未来展望 随着科技的飞速发展&#xff0c;人工智能领域不断迎来新的突破。根据最新消息&#xff0c;OpenAI 的首席技术官米拉穆拉蒂在一次采访中确认&#xff0c;GPT-5 将在一年半后发布&#xff0c;并描述了其从 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多美金&#xff0c;国内1688也能到400多人民币。 随着各路国内厂商和DIY创客的跟进&#xff0c;功能变多的同时价格一路下滑&#xff0c;虽然有的质感的确感人&#xff0c;但是便宜啊。 甚至关注的up有把成本搞到…...

表单自定义组件 - 可选择卡片SelectCard

import React from react; import styles from ./index.module.less;type OptionsType {/*** 每个item渲染一行&#xff0c;第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. 创建类头文件 首先&#xff0c;定义你要封装的类。例如&#xff0c;创建一个名为MyClass的类&#xff1a; // MyClass.h #pragma once#ifdef MYCLASS_EXPORTS #define MYCLASS_API __declspec(dllexport) #else #define MYCLASS_API __declspec(dllimport) #end…...

嵌入式C语言变量初始化技术详解

## 1. 嵌入式C语言变量初始化技术详解### 1.1 初始化的重要性与基本原则在嵌入式系统开发中&#xff0c;变量初始化是防止未定义行为的关键步骤。由于嵌入式编译器特性的差异&#xff0c;未初始化的变量可能包含随机值&#xff0c;导致系统出现不可预测的行为。根据变量类型的不…...

Claude Code智能测试生成:5步构建企业级自动化测试体系

Claude Code智能测试生成&#xff1a;5步构建企业级自动化测试体系 【免费下载链接】claude-code Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining comple…...

BiliRoamingX集成开发:Android 14兼容性优化与高级模块注入技术解析

BiliRoamingX集成开发&#xff1a;Android 14兼容性优化与高级模块注入技术解析 【免费下载链接】BiliRoamingX-integrations BiliRoamingX integrations powered by revanced. 项目地址: https://gitcode.com/gh_mirrors/bi/BiliRoamingX-integrations BiliRoamingX作为…...

BURSTER 9235 (85437090) 应变片信号放大器

BURSTER 9235 (85437090) 应变片信号放大器品牌&#xff1a;BURSTER&#xff08;德国波司特&#xff0c;精密测量技术专家&#xff09;型号&#xff1a;9235内部订货号&#xff1a;85437090类型&#xff1a;直连式&#xff08;In-Line&#xff09;应变片传感器信号放大器一、核…...

EmbeddingGemma-300m在Mathtype公式的语义理解中的应用

EmbeddingGemma-300m在Mathtype公式的语义理解中的应用 1. 引言 数学公式的语义理解一直是自然语言处理领域的挑战性任务。传统的文本嵌入模型在处理复杂的数学表达式时往往力不从心&#xff0c;无法准确捕捉公式背后的数学含义和逻辑关系。EmbeddingGemma-300m作为Google最新…...

5分钟搭建专业级缠论可视化分析平台:从零到实战的完整指南

5分钟搭建专业级缠论可视化分析平台&#xff1a;从零到实战的完整指南 【免费下载链接】chanvis 基于TradingView本地SDK的可视化前后端代码&#xff0c;适用于缠论量化研究&#xff0c;和其他的基于几何交易的量化研究。 缠论量化 摩尔缠论 缠论可视化 TradingView TV-SDK 项…...

大多数加密API都不够用:量化团队真正需要的数据到底是什么?

如果你做过加密相关开发&#xff0c;无论是&#xff1a; 量化交易数据平台研究分析风控系统 你大概率都会经历一个阶段&#xff1a; &#x1f449; API 接了一堆&#xff0c;但始终“不够用”。 常见的一个误区 很多人在刚开始做数据接入时&#xff0c;会觉得&#xff1a; …...

SecGPT-14B案例分享:某能源企业OT网络异常通信行为识别过程

SecGPT-14B案例分享&#xff1a;某能源企业OT网络异常通信行为识别过程 1. 引言&#xff1a;当能源网络遭遇“隐形”威胁 想象一下&#xff0c;一家大型能源企业的工业控制系统&#xff08;OT网络&#xff09;正在平稳运行&#xff0c;控制着发电、输电的关键设备。突然&…...

【实战】Ubuntu20.04硬盘挂载与权限管理全攻略(从分区合并到ext4格式化)

1. 从Windows迁移到Ubuntu的硬盘处理痛点 刚接触Ubuntu的Windows用户经常会遇到一个头疼问题&#xff1a;原先在Windows下分好区的机械硬盘&#xff0c;在Ubuntu系统里居然"消失"了。这不是硬盘真的不见了&#xff0c;而是Linux系统对NTFS分区的识别机制不同。我去年…...

5步快速解锁付费内容:bypass-paywalls-chrome-clean终极指南 [特殊字符]

5步快速解锁付费内容&#xff1a;bypass-paywalls-chrome-clean终极指南 &#x1f680; 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的时代&#xff0c;你是否经常遇到优…...