专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 图形/图像

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

发布时间:2011-06-27 19:30:48 文章来源:www.iduyao.cn 采编人员:星星草
Kinect彩色相机标定(一):彩色图像的采集

平台: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;
}


友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: