红外图像和深度图像一样,分辨率都是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;