// OpenNI Header
#include <XnCppWrapper.h>
#include<iostream>
// link OpenNI library
#pragma comment( lib, "OpenNI.lib" )
// OpenCV Header
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace std;
using namespace cv;
// main function
int main( int argc, char** argv )
{
// 1a. initial OpenNI
xn::Context xContext;
xContext.Init();
// 1b. create depth generator
xn::DepthGenerator xDepth;
xDepth.Create( xContext );
// 1c. create image generator
xn::ImageGenerator xImage;
xImage.Create( xContext );
// 1d. set alternative view point
xDepth.GetAlternativeViewPointCap().SetViewPoint( xImage );
VideoWriter writer1("rgb.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480),true);
VideoWriter writer2("depth.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480),0);
Mat frame;
//创建视频写入器
// 3. start OpenNI
xContext.StartGeneratingAll();
// main loop
while( true )
{
// 4. update data
xContext.WaitAndUpdateAll();
// 5. get image data
{
xn::ImageMetaData xColorData;
xImage.GetMetaData( xColorData );
// 5a. convert to OpenCV form
cv::Mat cColorImg( xColorData.FullYRes(), xColorData.FullXRes(),
CV_8UC3, (void*)xColorData.Data() );
// 5b. convert from RGB to BGR
cv::Mat cBGRImg;
cvtColor( cColorImg, cBGRImg, CV_RGB2BGR );
cv::imshow( "Color Image", cBGRImg );
writer1 << cBGRImg;
}
// 6. get depth data
{
xn::DepthMetaData xDepthData;
xDepth.GetMetaData( xDepthData );
// 6a. convert to OpenCV form
cv::Mat cDepthImg( xDepthData.FullYRes(), xDepthData.FullXRes(),
CV_16UC1, (void*)xDepthData.Data() );
// 6b. convert to 8 bit
cv::Mat c8BitDepth;
cDepthImg.convertTo( c8BitDepth, CV_8U, 255.0 / 7000 );
cv::imshow( "Depth Image", c8BitDepth );
writer2 << c8BitDepth;
}
cv::waitKey( 1 );
}
}