#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
#include "OpenNI.h"
using namespace openni;
using namespace cv;
using namespace std;
int main()
{
Status rc = STATUS_OK; // OpenNI函数执行结果
//OpenNI2图
VideoFrameRef oniDepthImg, oniColorImg;
//OpenCV图
Mat cvDepthImg, cvBGRImg, cvFusionImg;
//初始化OpenNI2
rc = OpenNI::initialize();
//打开Kinect或Xtion设备
Device device;
const char * deviceURL = openni::ANY_DEVICE; //设备名
rc = device.open(deviceURL);
//创建并打开深度数据流
VideoStream oniDepthStream; //深度数据流
rc = oniDepthStream.create(device, SENSOR_DEPTH); //创建深度数据流
if( STATUS_OK == rc )
{
//设置深度视频模式
VideoMode modeDepth;
modeDepth.setResolution(320,240/*640,480*/); //分辨率
modeDepth.setFps(30); //帧率
modeDepth.setPixelFormat(PIXEL_FORMAT_DEPTH_1_MM); //深度像素格式
oniDepthStream.setVideoMode(modeDepth);
oniDepthStream.start(); // 打开深度数据流
if(STATUS_OK != rc)
{
cerr << "无法打开深度数据流:"<<OpenNI::getExtendedError()<<endl;
oniDepthStream.destroy();
}
}
else
{
cerr << "无法创建深度数据流:"<<OpenNI::getExtendedError()<<endl;
}
//创建并打开彩色数据流
VideoStream oniColorStream; //RGB数据流
rc = oniColorStream.create(device, SENSOR_COLOR);
if(STATUS_OK == rc)
{
//设置彩色视频模式
VideoMode modeColor;
//不知道为什么,彩色图的分辨率无论如何设置始终都是320*240
modeColor.setResolution(320,240/*1280,1040*/);//分辨率
modeColor.setFps(30);//帧率
modeColor.setPixelFormat(PIXEL_FORMAT_RGB888);
//设置深度图和彩色图的配准模式
if(device.isImageRegistrationModeSupported(IMAGE_REGISTRATION_DEPTH_TO_COLOR))
{
device.setImageRegistrationMode(IMAGE_REGISTRATION_DEPTH_TO_COLOR); //深度到彩色图配准
}
rc = oniColorStream.start(); //打开彩色数据流
if( STATUS_OK != rc )
{
cerr<< "无法打开彩色数据流:"<<OpenNI::getExtendedError()<<endl;
oniColorStream.destroy();
}
}
else
{
cerr << "无法创建彩色数据流:"<<OpenNI::getExtendedError()<<endl;
}
if (!oniDepthStream.isValid() || !oniColorStream.isValid())
{
cerr << "彩色或深度数据流不合法"<<endl;
OpenNI::shutdown();
return 1;
}
namedWindow("depth");
namedWindow("RGB");
namedWindow("fusion");
while(true)
{
//读取一帧深度图
if( STATUS_OK == oniDepthStream.readFrame(&oniDepthImg) )
{
Mat cvRawImg16U(oniDepthImg.getHeight(), oniDepthImg.getWidth(), CV_16UC1, (void*)oniDepthImg.getData());
cvRawImg16U.convertTo(cvDepthImg, CV_8U, 255.0/(oniDepthStream.getMaxPixelValue()));
flip(cvDepthImg,cvDepthImg,1);//水平翻转
imshow("depth", cvDepthImg);
}
//读取一帧彩色图
if( STATUS_OK == oniColorStream.readFrame(&oniColorImg) )
{
Mat cvRGBImg(oniColorImg.getHeight(), oniColorImg.getWidth(), CV_8UC3, (void*)oniColorImg.getData());
cvtColor(cvRGBImg, cvBGRImg, CV_RGB2BGR);
flip(cvBGRImg,cvBGRImg,1);//水平翻转
imshow("RGB", cvBGRImg);
}
//融合图
cvtColor(cvDepthImg,cvFusionImg,CV_GRAY2BGR);
addWeighted(cvBGRImg, 0.5, cvFusionImg, 0.5, 0, cvFusionImg);
flip(cvFusionImg,cvFusionImg,1);//水平翻转
imshow("fusion", cvFusionImg);
waitKey(30);//没有waitKey不显示图像
}
destroyWindow("depth");
destroyWindow("RGB");
destroyWindow("fusion");
oniDepthStream.destroy();
oniColorStream.destroy();
device.close();
OpenNI::shutdown();
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
OpenNI2XtionRGBD.rar (58个子文件)
OpenNI2XtionRGBD
Debug
OpenNI2XtionRGBD.pdb 1.57MB
OpenNI2XtionRGBD.exe 65KB
OpenNI2XtionRGBD.ilk 564KB
OpenNI2XtionRGBD
OpenNI2.dll 215KB
Debug
cl.command.1.tlog 702B
link.7100.read.1.tlog 2B
link.1716-cvtres.write.1.tlog 2B
OpenNI2XtionRGBD.exe.intermediate.manifest 381B
rc.command.1.tlog 622B
CL.read.1.tlog 23KB
vc100.idb 651KB
mt.read.1.tlog 358B
link.7524.write.1.tlog 2B
link.7100.write.1.tlog 2B
link.7524.read.1.tlog 2B
link.1716.read.1.tlog 2B
link.1716-cvtres.read.1.tlog 2B
link-cvtres.read.1.tlog 2B
link.read.1.tlog 3KB
OpenNI2XtionRGBD.lastbuildstate 52B
link.7524-cvtres.write.1.tlog 2B
rc.read.1.tlog 330B
link.write.1.tlog 822B
CL.write.1.tlog 390B
link.6800.read.1.tlog 2B
link.7100-cvtres.write.1.tlog 2B
vc100.pdb 972KB
link.6800-cvtres.read.1.tlog 2B
link.6800.write.1.tlog 2B
link.command.1.tlog 2KB
link.1716.write.1.tlog 2B
OpenNI2XtionRGBD.exe.embed.manifest 406B
mt.write.1.tlog 358B
link.7100-cvtres.read.1.tlog 2B
link.6800-cvtres.write.1.tlog 2B
OpenNI2XtionRGBD.log 2KB
OpenNI2XtionRGBD.obj 216KB
link.7524-cvtres.read.1.tlog 2B
OpenNI2XtionRGBD.exe.embed.manifest.res 472B
mt.command.1.tlog 440B
rc.write.1.tlog 338B
link-cvtres.write.1.tlog 2B
OpenNI2XtionRGBD_manifest.rc 222B
PS1080.ini 4KB
OpenNI.ini 140B
OpenNI2XtionRGBD.vcxproj 4KB
OpenNI2.pdb 1.5MB
OpenNI2XtionRGBD.vcxproj.user 143B
OpenNI2XtionRGBD.cpp 3KB
OpenNI2XtionRGBD.vcxproj.filters 965B
OpenNI2
Drivers
Kinect.dll 136KB
PS1080.pdb 2.65MB
OniFile.pdb 1.22MB
OniFile.dll 182KB
Kinect.pdb 883KB
PS1080.dll 392KB
OpenNI2XtionRGBD.sln 915B
OpenNI2XtionRGBD.suo 12KB
共 58 条
- 1
masikkk
- 粉丝: 1623
- 资源: 105
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页