kinect2.0开发笔记(三) 获取红外图

红外图像和深度图像一样,分辨率都是512*424,所以,几乎可以肯定红外图和深度图是从一个摄像头获取的。

但是,我现在还没明白,红外图有啥用呢。或许,是因为我还是一个kinect初级开发者。

好了,废话不多说,直接上代码。

获取红外图,并利用opencv显示。

        HRESULT hr;
	// Current Kinect  
	IKinectSensor* m_pKinectSensor = NULL;
	hr = GetDefaultKinectSensor(&m_pKinectSensor);
	if (FAILED(hr))
	{
		cout << "无法连接Kinect" << endl;
		return hr;
	}
	hr = m_pKinectSensor->Open();
	if (FAILED(hr))
	{
		cout << "无法打开Kinect" << endl;
		return hr;
	}

	//获取Source
	IInfraredFrameSource  * mySource = nullptr;      
	hr = m_pKinectSensor->get_InfraredFrameSource(&mySource);
	if (FAILED(hr))
	{
		cout << "无法获取Kinect资源" << endl;
		return hr;
	}
	//取得宽和高等下用
	int height = 0;
	int width = 0;                     
	IFrameDescription  * myDescription = nullptr;
	mySource->get_FrameDescription(&myDescription);
	myDescription->get_Height(&height);
	myDescription->get_Width(&width);

	//第3步打开Reader
	IInfraredFrameReader  * myReader = nullptr;     
	mySource->OpenReader(&myReader);

	Mat img(height, width, CV_16UC1);
	IInfraredFrame  * myFrame = nullptr;
	char key = 0;
	while (true)
	{
		if (myReader->AcquireLatestFrame(&myFrame) == S_OK) //第4步获取Frame
		{
			myFrame->CopyFrameDataToArray(height * width, (UINT16 *)img.data);
			namedWindow("infrare", 0);
			imshow("infrare", img);
			myFrame->Release();
		}
		key = cv::waitKey(1);
		if (key == 27)
		{
			break;
		}
	}

	myReader->Release();        //记得要释放
	myDescription->Release();
	mySource->Release();
	m_pKinectSensor->Close();
	m_pKinectSensor->Release();

	return 0;




评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值