平台:Windows 7 x86,OpenCV2.4.9,OpenNI1.5.4.0,VS2010
采用了4种方式对彩色图和深度图进行滤波,分别为均值滤波、高斯滤波、中值滤波和双边滤波。并且利用滚动条实现4种滤波方式的参数可调。
<span style="font-size:14px;">#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, blur_c_out, GaussianBlur_c_out, MedianBlur_c_out, bilateralFilter_c_out;
Mat cvDepthImage8UC1, blur_g_out, GaussianBlur_g_out, MedianBlur_g_out, bilateralFilter_g_out;
int g_nMeanBlurValue=10; //均值滤波内核值
int g_nGaussianBlurValue=6; //高斯滤波内核值
int g_nMedianBlurValue=10; //中值滤波参数值
int g_nBilateralFilterValue=10; //双边滤波参数值
//---------------------------------------------------------------------------------//
//---------------------------------【全局函数声明】---------------------------------//
static void on_MeanBlur_c(int, void *); //均值滤波器(彩色)
static void on_GaussianBlur_c(int, void *); //高斯滤波器(彩色)
static void on_MedianBlur_c(int, void *); //中值滤波器(彩色)
static void on_BilateralFilter_c(int, void *); //双边滤波器(彩色)
static void on_MeanBlur_g(int, void *); //均值滤波器(深度)
static void on_GaussianBlur_g(int, void *); //高斯滤波器(深度)
static void on_MedianBlur_g(int, void *); //中值滤波器(深度)
static void on_BilateralFilter_g(int, void *); //双边滤波器(深度)
void ShowHelpText();
//---------------------------------------------------------------------------------//
void CheckOpenNIError(XnStatus eResult,string sStatus) //检测错误并返回错误的函数
{
if(eResult != XN_STATUS_OK)
cout << sStatus << "Error: " << xnGetStatusString(eResult) << endl;
}
int main()
{
//system("color 4F"); //cmd窗口颜色
ShowHelpText();
XnStatus eResult = XN_STATUS_OK;
ImageMetaData imageMD;
DepthMetaData depthMD;
Context mContext; //初始化上下文对象
eResult = mContext.Init();
CheckOpenNIError(eResult, "Initialize context");
ImageGenerator mImageGenerator; //创建彩色图像生产节点
eResult = mImageGenerator.Create(mContext);
CheckOpenNIError(eResult, "Create image generator");
DepthGenerator mDepthGenerator; //创建深度图像生产节点
eResult = mDepthGenerator.Create(mContext);
CheckOpenNIError(eResult, "Create depth generator");
XnMapOutputMode mapMode; //设置图像分辨率
mapMode.nXRes = 640;
mapMode.nYRes = 480;
mapMode.nFPS = 30;
eResult = mImageGenerator.SetMapOutputMode(mapMode);
eResult = mDepthGenerator.SetMapOutputMode(mapMode);
mDepthGenerator.GetAlternativeViewPointC