当前位置: 首页 > 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…...

每天一个项目管理概念之项目章程

项目管理中&#xff0c;项目章程扮演着至关重要的角色。它是项目正式启动的标志&#xff0c;为项目的执行提供法律和组织上的认可。项目章程是项目管理知识体系&#xff08;PMBOK&#xff09;中定义的关键文档之一&#xff0c;对于确保项目的顺利进行具有决定性的影响。 定义与…...

c++11新特性-4-返回类型后置

文章目录 返回类型后置1.基本语法 返回类型后置 1.基本语法 auto func(参数1&#xff0c;参数2&#xff0c;参数3&#xff0c;...)->decltype(参数表达式) {...... }例如&#xff1a; template<typename T,typename U> auto add(T t,U u)->decltype(t u) {retu…...

Linux-C语言实现一个进度条小项目

如何在linux中用C语言写一个项目来实现进度条&#xff1f;&#xff08;如下图所示&#xff09; 我们知道\r是回车&#xff0c;\n是换行&#xff08;且会刷新&#xff09; 我们可以用 \r 将光标移回行首&#xff0c;重新打印一样格式的内容&#xff0c;覆盖旧的内容&#xff0c;…...

vue使用glide.js实现轮播图(可直接复制使用)

效果图 可以实现自动轮播&#xff0c;3种切换方式&#xff1a;直接滑动图片、点击两侧按钮、点击底部按钮 体验链接:http://website.livequeen.top 实现 一、引入依赖 1、控制台引入依赖 npm install glidejs/glide 2、在css中引用 <style scoped> import glidejs/g…...

TK养号工具开发会用上的源代码科普!

在当今数字化时代&#xff0c;社交媒体平台的崛起使得网络账号的维护与管理变得日益重要&#xff0c;其中&#xff0c;TK作为一款备受欢迎的社交媒体平台&#xff0c;吸引了大量用户。 在TK上进行账号养护&#xff0c;即通过各种方式提升账号权重、增加曝光量&#xff0c;已成…...

信创-办公软件应用工程师认证

随着国家对信息技术自主创新的战略重视程度不断提升&#xff0c;信创产业迎来前所未有的发展机遇。未来几年内&#xff0c;信创产业将呈现市场规模扩大、技术创新加速、产业链完善和国产化替代加速的趋势。信创人才培养对于推动产业发展具有重要意义。应加强高校教育、建立人才…...

数组操作forEach和map

forEach和map的相同点 1、都是循环遍历数组中的每一项 2、入参匿名函数都支持三个参数&#xff0c;当前项item&#xff0c;当前项索引index&#xff0c;原始数组arr&#xff1b;匿名函数中的this都指向window 3、都可以通过return跳过本次循环 4、都无法通过使用 break 语句来中…...

流式处理应用场景与流式计算处理框架选择建议

文章目录 前言使用场景如何选择流式处理框架 前言 在之前的文章中我们介绍了如何进行流式处理——从一般性的概念和模式说起&#xff0c;并列举了一些Streams的例子&#xff1a; 流式处理相关概念总结说明流式处理设计模式总结说明Kafka Streams 架构概览 接下来的文章将介绍…...

2024年软件测试岗必问的100+个面试题【含答案】

一、基础理论 1、开场介绍 介绍要领&#xff1a;个人基本信息、工作经历、之前所做过的工作及个人专长或者技能优势。扬长避短&#xff0c;一定要口语化&#xff0c;语速适中。沟通好的就多说几句&#xff0c;沟通不好的话就尽量少说两句。举例如下&#xff1a; 面试官你好&…...

A4-C四驱高防轮式巡检机器人

在当今数字化和智能化迅速发展的时代&#xff0c;旗晟智能带来了一款革命性的创新产品——A4-C四驱高防轮式巡检机器人。这款机器人以其卓越的性能和多功能性&#xff0c;为工业巡检领域带来了全新的解决方案。 一、产品亮点 1、四驱动力与高防护设计 四驱高防轮式巡检机器人…...