#include <stdlib.h>
#include <iostream>
#include <string>
#include <XnCppWrapper.h>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace xn;
using namespace cv;
void CheckOpenNIError(XnStatus eResult,string sStatus)
{
if(eResult != XN_STATUS_OK)
cout << sStatus << "Error: " << xnGetStatusString(eResult) << endl;//P53
}
int main()
{
XnStatus eResult = XN_STATUS_OK;
DepthMetaData depthMD;
IRMetaData irData;
namedWindow("Depth Image");
namedWindow("IRImage");
Context mContext;
eResult = mContext.Init();
CheckOpenNIError(eResult,"Initialize context");
DepthGenerator mDepthGenerator;
eResult = mDepthGenerator.Create(mContext);
CheckOpenNIError(eResult,"Create depth generator");
IRGenerator mIRGenerator;
eResult = mIRGenerator.Create(mContext);
CheckOpenNIError(eResult,"Create depth generator");
XnMapOutputMode mapMode;
mapMode.nXRes = 320;
mapMode.nYRes = 240;
mapMode.nXRes = 30;
eResult = mDepthGenerator.SetMapOutputMode(mapMode);
XnMapOutputMode MyMapMode;
MyMapMode.nXRes = 640;
MyMapMode.nYRes = 480;
MyMapMode.nFPS = 30;
mIRGenerator.SetMapOutputMode( MyMapMode );
eResult = mContext.StartGeneratingAll();
int flag=0;
while(true)
{
eResult = mContext.WaitAnyUpdateAll();
if(eResult == XN_STATUS_OK)
{
mDepthGenerator.GetMetaData(depthMD);
Mat cvDepthImage16UC1(depthMD.FullYRes(),depthMD.FullXRes(),CV_16UC1,(char*) depthMD.Data());
Mat cvDepthImage8UC1;
cvDepthImage16UC1.convertTo(cvDepthImage8UC1,CV_8UC1,255.0/(depthMD.ZRes()));
imshow("Depth Image",cvDepthImage8UC1);
mIRGenerator.GetMetaData(irData);
Mat irImage16UC1(irData.FullYRes(),irData.FullXRes(),CV_16UC1,(char*) irData.Data());
Mat irImage8UC1;
irImage16UC1.convertTo(irImage8UC1,CV_8UC1,255.0/255);
imshow("IRImage",irImage8UC1);
waitKey(30);
}
}
mContext.StopGeneratingAll();
mContext.Shutdown();
return 0;
}
利用IR这个生产节点获取图像,并显示出来。然后就会发现,手的提取好简单。。
OPENNI学习实践-利用openni获取红外图像
最新推荐文章于 2024-08-15 09:34:46 发布