OPenNI獲取並保存彩色、深度視頻

// 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 );
	}
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章