奧比中光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	}	

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40390.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40390.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40390.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第20章 Mac+VSCode配置C++環境

1. 下載VSCode VSCode下載地址在mac終端里輸入xcode- select --install命令&#xff0c;根據提示安裝xcode工具。 2. 安裝插件&#xff08;4個&#xff09; 打開VScode&#xff0c;點擊應用右側菜單欄 C/C&#xff08;必裝&#xff09; Code Runner&#xff08;必裝&#xf…

UCOS-III 任務調度與就緒列表管理

01. 就緒優先級位圖 在實時操作系統中&#xff0c;任務調度的效率至關重要。UCOS-III通過就緒優先級位圖來快速查找最高優先級的就緒任務&#xff0c;從而實現高效調度。就緒優先級位圖是一個按位表示的結構&#xff0c;每個位代表一個優先級&#xff0c;當某個優先級上有任務就…

高效管理 TensorFlow 2 GPU 顯存的實用指南

前言 在使用 TensorFlow 2 進行訓練或預測時&#xff0c;合理管理 GPU 顯存至關重要。未能有效管理和釋放 GPU 顯存可能導致顯存泄漏&#xff0c;進而影響后續的計算任務。在這篇文章中&#xff0c;我們將探討幾種方法來有效釋放 GPU 顯存&#xff0c;包括常規方法和強制終止任…

【FFmpeg】avcodec_open2函數

目錄 1. avcodec_open21.1 編解碼器的預初始化&#xff08;ff_encode_preinit & ff_decode_preinit&#xff09;1.2 編解碼器的初始化&#xff08;init&#xff09;1.3 釋放編解碼器&#xff08;ff_codec_close&#xff09; FFmpeg相關記錄&#xff1a; 示例工程&#xff…

Windows編程之多線程事件對象(Event Object)用法詳解

目錄 一、前言 二、基礎用法 三、API詳解 1.創建事件對象 2控制事件狀態 3.等待事件對象&#xff1a; 四、實戰案例 1.案例描述 2.代碼設計 3.總設計代碼 4.運行結果 一、前言 事件對象&#xff08;Event Object&#xff09;是我們在大型項目中&#xff0c;進行多線…

競賽選題 醫學大數據分析 - 心血管疾病分析

文章目錄 1 前言1 課題背景2 數據處理3 數據可視化4 最后 1 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大數據的心血管疾病分析 該項目較為新穎&#xff0c;適合作為競賽課題方向&#xff0c;學長非常推薦&#xff01; &#x1f9…

AI繪畫Stable Diffusion 解鎖精美壁紙創作:利用SD與LLM定制你的專屬壁紙,AI副業變現指南!

大家好&#xff0c;我是畫畫的小強 今天給大家分享一下用AI繪畫Stable Diffusion 制作精美手機壁紙&#xff0c;這也可能是當前最快AIGC變現的一種途徑。雖然本文的主題為手機壁紙&#xff0c;當調整不同的比例的分辨率寬高比例&#xff0c;就可以直接復用到手機、電腦和平板、…

旋轉和鏡像的關系

旋轉矩陣行列式與 在E(3)三維空間中&#xff0c;旋轉矩陣的行列式可以用來判斷該旋轉是否包含鏡像變換。 行列式為正&#xff1a; 表示純旋轉&#xff0c;不包含鏡像。 旋轉矩陣保持向量的長度和角度不變&#xff0c;只是改變向量的方向。 行列式為負&#xff1a; 表示旋轉…

機器學習原理之 -- 支持向量機分類:由來及原理詳解

支持向量機&#xff08;Support Vector Machine, SVM&#xff09;是統計學習理論的一個重要成果&#xff0c;廣泛應用于分類和回歸問題。SVM以其高效的分類性能和良好的泛化能力在機器學習領域中占據重要地位。本文將詳細介紹支持向量機的由來、基本原理、構建過程及其優缺點。…

LVS負載均衡群集部署之——DR模式的介紹及搭建步驟

一、LVS-DR集群介紹1.1 LVS-DR 工作原理1.2 數據包流向分析1.3 LVS-DR 模式的特點1.4 LVS-DR中的ARP問題1.4.1 問題一1.4.2 問題二二、構建LVS-DR集群2.1 構建LVS-DR集群的步驟&#xff08;理論&#xff09;1.配置負載調度器&#xff08;192.168.80.30&#xff09;&#xff08;…

5分鐘教你用AI把老照片動起來,別再去花49塊9的冤枉錢了

文章目錄 需要的工具 最近&#xff0c;AI視頻在各大平臺上&#xff0c;又火了。 只是火的形式&#xff0c;變成了將老照片動起來&#xff0c;打情感牌&#xff0c;或者做很多經典電視劇的再整活。 直接把可靈的生成時間&#xff0c;從以前的4分鐘&#xff0c;生生的干成了20分鐘…

鴻蒙應用筆記

安裝就跳過了&#xff0c;一直點點就可以了 配置跳過&#xff0c;就自動下了點東西。 鴻蒙那個下載要12g個內存&#xff0c;大的有點嚇人。 里面跟idea沒區別 模擬器或者真機運行 真機要鴻蒙4.0&#xff0c;就可以實機調試 直接在手機里面跑&#xff0c;這個牛逼&#xf…

國標GB/T 28181詳解:國標GBT28181-2022 SIP服務器發起廣播的命令流程

目錄 一、定義 二、作用 1、實現信息的集中管理和分發 &#xff08;1&#xff09;信息集中 &#xff08;2&#xff09;信息分發 2、提高信息傳輸的可靠性和效率 &#xff08;1&#xff09;可靠性 &#xff08;2&#xff09;提高效率 3、支持多種設備和系統的互通 &am…

mongdb學習與使用

1. 基礎概念 MongoDB簡介&#xff1a; MongoDB是一個基于文檔的NoSQL數據庫&#xff0c;具有高性能、高可用性和易擴展性。數據存儲在類似JSON的BSON格式中。 基本術語&#xff1a; Database&#xff08;數據庫&#xff09;&#xff1a; 集合的容器。Collection&#xff08;集合…

國產強大免費WAF, 社區版雷池動態防護介紹

雷池WAF&#xff0c;基于智能語義分析的下一代 Web 應用防火墻 使用情況 我司于2023年4月23日對雷池進行測試&#xff0c;測試一個月后&#xff0c;于2023年5月24日對雷池進行正式切換&#xff0c;此時版本為1.5.1。 里程碑紀念 后續一直跟隨雷池進行版本升級&#xff0c;當前…

QT_GUI

1、QT安裝 一個跨平臺的應用程序和用戶界面框架&#xff0c;用于開發圖形用戶界面&#xff08;GUI&#xff09;應用程序以及命令行工具。QT有商業版額免費開源版&#xff0c;一般使用免費開源版即可&#xff0c;下面安裝的是QT5&#xff0c;因為出來較早&#xff0c;使用較多&…

Python特征工程 — 1.4 特征歸一化方法詳解

目錄 1 Min-Max歸一化 方法1&#xff1a;自定義的Min-Max歸一化封裝函數 方法2&#xff1a; scikit-learn庫中的MinMaxScaler 2 Z-score歸一化 方法1&#xff1a;自定義的Z-score歸一化封裝函數 方法2&#xff1a; scikit-learn庫中的StandardScaler 3 最大值歸一化 4 L…

考研生活day1--王道課后習題2.2.1、2.2.2、2.2.3

2.2.1 題目描述&#xff1a; 解題思路&#xff1a; 這是最基礎的操作&#xff0c;思路大家應該都有&#xff0c;缺少的應該是如何下筆&#xff0c;很多同學都是有思路但是不知道如何下筆&#xff0c;這時候看思路的意義不大&#xff0c;可以直接看答案怎么寫&#xff0c;最好…

Java項目:基于SSM框架實現的游戲攻略網站系統分前后臺【ssm+B/S架構+源碼+數據庫+畢業論文+任務書】

一、項目簡介 本項目是一套基于SSM框架實現的游戲攻略網站系統 包含&#xff1a;項目源碼、數據庫腳本等&#xff0c;該項目附帶全部源碼可作為畢設使用。 項目都經過嚴格調試&#xff0c;eclipse或者idea 確保可以運行&#xff01; 該系統功能完善、界面美觀、操作簡單、功能…

redhat7.x 升級openssh至openssh-9.8p1

1.環境準備&#xff1a; OS系統&#xff1a;redhat 7.4 2.備份配置文件&#xff1a; cp -rf /etc/ssh /etc/ssh.bak cp -rf /usr/bin/openssl /usr/bin/openssl.bak cp -rf /etc/pam.d /etc/pam.d.bak cp -rf /usr/lib/systemd/system /usr/lib/systemd/system.bak 3.安裝…