1. 程式人生 > >kinect 2.0 學習筆記_深度相機內參

kinect 2.0 學習筆記_深度相機內參

深度相機內參和紅外相機是一樣的。今天來學習一下如何通過kinect的API求得內參。

程式碼:

#include "kinect.h"
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>


#include <fstream>  

using namespace cv;
using namespace std;
// 安全釋放指標
template<class Interface>
inline void SafeRelease(Interface *& pInterfaceToRelease)
{
	if (pInterfaceToRelease != NULL)
	{
		pInterfaceToRelease->Release();
		pInterfaceToRelease = NULL;
	}
}


int main() {
	int flag = 1;
	// 獲取Kinect裝置
	IKinectSensor*  m_pKinectSensor;
	// 對映器
	ICoordinateMapper*  m_pCoordinateMapper = NULL;
	HRESULT hr;
	hr = GetDefaultKinectSensor(&m_pKinectSensor);
	if (FAILED(hr) )
	{
		return hr;
	}
	IMultiSourceFrameReader* m_pMultiFrameReader = NULL;
	if (m_pKinectSensor)
	{
		hr = m_pKinectSensor->Open();
		if (SUCCEEDED(hr))
		{
			// 獲取多資料來源到讀取器  
			hr = m_pKinectSensor->OpenMultiSourceFrameReader(
				FrameSourceTypes::FrameSourceTypes_Color |
				FrameSourceTypes::FrameSourceTypes_Infrared |
				FrameSourceTypes::FrameSourceTypes_Depth,
				&m_pMultiFrameReader);
		}
	}

	if (!m_pKinectSensor || FAILED(hr))
	{
		return E_FAIL;
	}

	// 三個資料幀及引用
	IInfraredFrame* m_pInfraredFrame = NULL;
	IDepthFrame* m_pDepthFrame = NULL;
	IColorFrame* m_pColorFrame = NULL;


	CameraIntrinsics* m_pCameraIntrinsics = new CameraIntrinsics();
	hr = m_pKinectSensor->get_CoordinateMapper(&m_pCoordinateMapper);
	if (FAILED(hr))
	{
		return hr;
	}
	//得到內參
	while (flag==1) {
		//獲取深度相機內參(要好幾千幀照片才能得到,否則資料全部為0)
		m_pCoordinateMapper->GetDepthCameraIntrinsics(m_pCameraIntrinsics);//GetDepthCameraIntrinsics:獲得ir相機引數(出廠已寫入裝置)
		if (m_pCameraIntrinsics->FocalLengthX && flag ==1) 
		{
			// 列印
			cout << "FocalLengthX : " << m_pCameraIntrinsics->FocalLengthX << endl; //攝像機的X焦距,以畫素為單位
			cout << "FocalLengthY : " << m_pCameraIntrinsics->FocalLengthY << endl; //相機的Y焦距,以畫素為單位
			cout << "PrincipalPointX : " << m_pCameraIntrinsics->PrincipalPointX << endl;//相機在X維中的主要點,以畫素為單位。
			cout << "PrincipalPointY : " << m_pCameraIntrinsics->PrincipalPointY << endl; //相機在Y軸上的主要點,以畫素為單位。
			cout << "RadialDistortionFourthOrder : " << m_pCameraIntrinsics->RadialDistortionFourthOrder << endl;//相機的四階徑向畸變引數。
			cout << "RadialDistortionSecondOrder : " << m_pCameraIntrinsics->RadialDistortionSecondOrder << endl;//相機的二階徑向畸變引數。
			cout << "RadialDistortionSixthOrder : " << m_pCameraIntrinsics->RadialDistortionSixthOrder << endl;//攝像機的六階徑向畸變引數。
			flag = 0;
		}	
	}
	 //儲存到01.txt文字
	ofstream fout("01.txt"); ////以輸出方式開啟檔案    如果想以輸入/輸出方式來開啟,就用fstream來定義
	fout << "FocalLengthX :  " << m_pCameraIntrinsics->FocalLengthX <<endl; //向檔案寫入資料
	fout << "FocalLengthY :  " << m_pCameraIntrinsics->FocalLengthY << endl; //向檔案寫入資料
	fout << "PrincipalPointX : " << m_pCameraIntrinsics->PrincipalPointX << endl;//相機在X維中的主要點,以畫素為單位。
	fout << "PrincipalPointY : " << m_pCameraIntrinsics->PrincipalPointY << endl; //相機在Y軸上的主要點,以畫素為單位。
	fout << "RadialDistortionFourthOrder : " << m_pCameraIntrinsics->RadialDistortionFourthOrder << endl;//相機的四階徑向畸變引數。
	fout << "RadialDistortionSecondOrder : " << m_pCameraIntrinsics->RadialDistortionSecondOrder << endl;//相機的二階徑向畸變引數。
	fout << "RadialDistortionSixthOrder : " << m_pCameraIntrinsics->RadialDistortionSixthOrder << endl;//攝像機的六階徑向畸變引數。
	// 關閉視窗,裝置
	cv::destroyAllWindows();
	m_pKinectSensor->Close();
	SafeRelease(m_pCoordinateMapper); // 安全釋放指標
	SafeRelease(m_pKinectSensor);// 安全釋放指標
	return 0;
}
結果:

API介紹:

https://docs.microsoft.com/en-us/previous-versions/windows/kinect/dn785315(v=ieb.10)

相關推薦

kinect 2.0 學習筆記_深度相機內參

深度相機內參和紅外相機是一樣的。今天來學習一下如何通過kinect的API求得內參。程式碼:#include "kinect.h" #include <iostream> #include <opencv2/core/core.hpp> #includ

.net core 2.0學習筆記(四):遷移.net framework 工程到.net core

編譯 its evel hashtable ref 學習筆記 inline null 創建 在遷移.net core的過程中,第一步就是要把.net framework 工程的目標框架改為.net core2.0,但是官網卻沒有提供轉換工具,需要我們自己動手完成了

一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 sdk nginx、supervisor、mysql環境搭建

image dev 預覽 def star fig brush rest aspnet 作為.neter,看到.net core 2.0的正式發布,心裏是有點小激動的,迫不及待的體驗了一把,發現速度確實是快了很多,其中也遇到一些小問題,所以整理了一些學習筆記: 閱讀目

.net core 2.0學習筆記(六):Remoting核心類庫RealProxy遷移

ride dispatch 包含 void reflect 既然 splay creat (六) 在學習.net core的過程中,我們已經明確被告知,Remoting將不會被支持。官方的解釋是,.net framework 類型包含了太多的Runtime的內容,是

一起學ASP.NET Core 2.0學習筆記(二): ef core2.0 及mysql provider 、Fluent API相關配置及遷移

upd order rac option 包管理 rtl code create .net core 不得不說微軟的技術叠代還是很快的,上了微軟的船就得跟著她走下去,前文一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 s

Vue 2.0學習筆記:事件匯流排(EventBus)

許多現代JavaScript框架和庫的核心概念是能夠將資料和UI封裝在模組化、可重用的元件中。這對於開發人員可以在開發整個應用程式時避免使用編寫大量重複的程式碼。雖然這樣做非常有用,但也涉及到元件之間的資料通訊。在Vue中同樣有這樣的概念存在。通過前面一段時間的學習,Vue元件資料通訊常常會有父子元

Vue 2.0 學習筆記一 基於webpack模板建立專案

vuejs 框架需要基於nodejs自帶的npm下載 所以電腦先安裝nodejs 地址:https://nodejs.org/en/download/   1全域性安裝腳手架       npm install --global vue-

.net core 2.0學習筆記(A11):實戰簡單檔案伺服器

前言:本案例適合入門來看。 首先,新建一個ASP.NET Core專案,專案名稱:StaticFilesServer 選擇空的模板,如下圖: 使用NUGet命令新增Microsoft.AspNetCore.StaticFiles引用: Ins

零基礎開發OpenGL ES 2.0學習筆記-Android篇(一)

看到蘋果應用商店的火爆,也想做點東西放在上面,現在終於有點時間,可是發現用到的技術都不會,要學的東西很多呀(真是落伍了)~ 身為一個JAVA程式設計師,IOS完全不懂,Android只會一些皮毛,OpenGL更是一竅不通。 所有的東西肯定都是以JAVA思想來寫,摻雜著自己的

專案實訓(一)Rxjava 2.0 學習筆記

我感覺Rxjava像是一條流水線,一塊原料到來經過層層加工最後交給訂閱者,當然不處理直接交給訂閱者也可以。 從基本設計(Rx1.0)來看,Observable有一個內部類例項OnSubscribe,當Observable呼叫subscribe時會呼叫這個OnS

CXF 2.0 學習筆記-3 SOAP Header

{        String webServiceUrl = "http://127.0.0.1:8080/cxfTest/ws/HelloWorld";        String webServiceConTimeout = "60000";        String webServiceRevTim

Jetson TX2 學習筆記(6) —— ROS下Kinect 2.0實現三位座標輸出的簡單應用

參照的是這篇部落格:https://blog.csdn.net/sunbibei/article/details/51594824 我使用的平臺是Jetson TX2,在~/JetsonROS/src/iai_kinect2/kinect2_viewer/src中複製 viewer.c

kinect 2.0 SDK學習筆記(三)--生成3D點雲

生成3D點雲 本文在上一教程座標對映基礎上,構建3D點雲並顯示出來。 1. 獲得深度幀和彩色幀: hr = m_pDepthFrameReader->AcquireLatestFra

kinect 2.0 SDK學習筆記(一)--獲得原始資料

工程配置 包含目錄加上: $(KINECTSDK20_DIR)\inc; 庫目錄加上: $(KINECTSDK20_DIR)\lib\x64;(注意選擇x64/x86) 其中KINECTSDK20_DIR是安裝kinect SDK時的安裝目錄

[dotnetCore2.0]學習筆記之一: ASP.NET Core 升級到2.0

玩耍 後來 razor ons 引用 net ins install 查找 需要升級: 1、SDK2.0 ,需要單獨安裝;https://www.microsoft.com/net/core#windowscmd   VS2017 不包含這個SDK;而這個SDK包含了run

RxJava2.0學習筆記2 2018年3月29日 星期四

pos 2.0 學習筆記 blog rxjava (九) 星期 ava 筆記 給初學者的RxJava2.0教程(一) 給初學者的RxJava2.0教程(二) 給初學者的RxJava2.0教程(三) 給初學者的RxJava2.0教程(四)

Activiti6.0 學習筆記2)-查詢歷史任務

使用HistoryService來查詢已經完成的任務:List<HistoricTaskInstance> tasks = historyService.createHistoricTaskInstanceQuery() .finished().tas

Cocos2D-X2.2.3學習筆記8(處理精靈單擊、雙擊和三連擊事件)

屏幕 () rtu cati 輸出 public exit 什麽是 avi 我們依據上一次介紹的觸屏事件和事件隊列等知識來實現觸屏的單擊,雙擊,三連擊事件。 下圖為我們實現的效果圖: 單擊精靈跳躍一個高度, 雙擊精靈跳躍的高度比單擊的高 三連擊精靈跳躍的跟高

ECMAScript 6.0 學習筆記

企業 編寫 lan 語言 http targe 程序 blank es6 ECMAScript 6入門 1、ECMAScript 6.0(也就是ES2015 以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經在2015年6月正式發布了。它的目標,是使得 J

Shader學習筆記_基礎知識_分量

spa 例如 string 不知道 坐標 nbsp pre 表示 設置 分量 矢量的分量名稱:{x,y,z,w}表示頂點; {r,g,b,a}表示顏色;{s,t,p,q}表示紋理坐標。 每個分量用點號連接(例如v2.x(一個float變量),v3.rg(一個vec2變量))