首页 > 其他 > 详细

Kinect彩色相机标定(一):彩色图像的采集

时间:2015-03-25 21:34:49      阅读:569      评论:0      收藏:0      [点我收藏+]

平台:Windows 7 x86,OpenCV2.4.9,OpenNI1.5.4.0,VS2010

首先采用了双边滤波对或得的彩色图像进行滤波,然后保存滤波后的图像。

#include <stdlib.h>  
#include <iostream>  
#include <string>  

#include <XnCppWrapper.h>  
#include <opencv2/opencv.hpp>  

using namespace std;  
using namespace xn;  
using namespace cv;  

//---------------------------------【全局变量声明】---------------------------------//
Mat cvBGRImage, BilateralFilter_c_out; 
int g_nBilateralFilterValue=10;	//双边滤波参数值
int imageNumber = 0;	//记录保存的图像的个数

//---------------------------------【全局函数声明】---------------------------------//
static void on_BilateralFilter_c(int, void *);	//双边滤波器(彩色)
void CheckOpenNIError(XnStatus eResult,string sStatus);

//------------------------------------【主函数】------------------------------------//
int main()  
{  
	ImageMetaData imageMD;  
	DepthMetaData depthMD; 

	XnStatus eResult = XN_STATUS_OK;  
	Context mContext;	//初始化上下文对象  
	eResult = mContext.Init();  
	CheckOpenNIError(eResult, "Initialize context");  

	ImageGenerator mImageGenerator;		//创建彩色图像生产节点  
	eResult = mImageGenerator.Create(mContext);  
	CheckOpenNIError(eResult, "Create image generator");  

	XnMapOutputMode mapMode;	//设置图像分辨率  
	mapMode.nXRes = 640;  
	mapMode.nYRes = 480; 
	mapMode.nFPS  = 30;  
	eResult = mImageGenerator.SetMapOutputMode(mapMode);  

	eResult = mContext.StartGeneratingAll();	//开始产生数据  

	char key;
	while(!(eResult = mContext.WaitNoneUpdateAll()))  
	{  
		mImageGenerator.GetMetaData(imageMD);  
		Mat cvRGBImage(imageMD.FullYRes(), imageMD.FullXRes(), CV_8UC3, (char*) imageMD.Data());
		cvtColor(cvRGBImage, cvBGRImage, CV_RGB2BGR);

		//======================【<0>双边滤波】====================//
		BilateralFilter_c_out = cvBGRImage.clone();
		bilateralFilter ( cvBGRImage, BilateralFilter_c_out, 10, 20, 5 );
		namedWindow("<0>双边滤波【效果图-彩色】"); 
		imshow("<0>双边滤波【效果图-彩色】", BilateralFilter_c_out);

		key = waitKey(5);  

 		if(key == 27)	//按下Esc键保存图像
 		{
			++imageNumber;
			std::stringstream ss;
			ss << "D:/Pictures/" << "Image" << imageNumber << ".jpg";
			imwrite(ss.str(), BilateralFilter_c_out);
 		}
	}  

	mContext.StopGeneratingAll();	//停止产生数据  
	mContext.Shutdown();  
	return 0;  
} 

//-------------------------------【CheckOpenNIError( )函数】--------------------------------
//		检测错误并返回错误 
//----------------------------------------------------------------------------------------------
void CheckOpenNIError(XnStatus eResult,string sStatus)
{  
	if(eResult != XN_STATUS_OK)  
		cout << sStatus << "Error: " << xnGetStatusString(eResult) << endl;
}

技术分享

技术分享

技术分享

Kinect彩色相机标定(一):彩色图像的采集

原文:http://blog.csdn.net/kh1445291129/article/details/44627297

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!