平台: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;
}
原文:http://blog.csdn.net/kh1445291129/article/details/44627297