当前位置: 代码迷 >> 综合 >> kinect 2.0 学习笔记_深度相机内参
  详细解决方案

kinect 2.0 学习笔记_深度相机内参

热度:52   发布时间:2023-11-25 05:57:48.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)


版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_37791134

  相关解决方案