运行后,采集的数据保存到:E:\OpenCVData目录下的color和depth文件夹下。
接下来要求参数:内参 外参 这些参数最好优化后使用精度高

如何得到+保存格式

yaml

保存文件格式:

1. 索引

2. 数据

3. 数据

4.。。。

其中copenni类是一个OPENNI对象类

#include <XnCppWrapper.h>
#include <QtGui/QtGui>
#include <iostream> using namespace xn;
using namespace std; class COpenNI
{
public:
~COpenNI() {
context.Release();//释放空间
}
bool Initial() {
//初始化
status = context.Init();
if(CheckError("Context initial failed!")) {
return false;
}
context.SetGlobalMirror(true);//设置镜像
//产生图片node
status = image_generator.Create(context);
if(CheckError("Create image generator error!")) {
return false;
}
//产生深度node
status = depth_generator.Create(context);
if(CheckError("Create depth generator error!")) {
return false;
}
//视角校正
status = depth_generator.GetAlternativeViewPointCap().SetViewPoint(image_generator);
if(CheckError("Can't set the alternative view point on depth generator")) {
return false;
} return true; } bool Start() {
status = context.StartGeneratingAll();
if(CheckError("Start generating error!")) {
return false;
}
return true;
} bool UpdateData() {
status = context.WaitNoneUpdateAll();
if(CheckError("Update date error!")) {
return false;
}
//获取数据
image_generator.GetMetaData(image_metadata);
depth_generator.GetMetaData(depth_metadata); return true;
} public:
DepthMetaData depth_metadata;
ImageMetaData image_metadata; private:
//该函数返回真代表出现了错误,返回假代表正确
bool CheckError(const char* error) {
if(status != XN_STATUS_OK ) {
QMessageBox::critical(NULL, error, xnGetStatusString(status));
cerr << error << ": " << xnGetStatusString( status ) << endl;
return true;
}
return false;
} private:
XnStatus status;
Context context;
DepthGenerator depth_generator;
ImageGenerator image_generator;
};

main是主类

#include <QtCore/QCoreApplication>

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/core/core.hpp>
#include "copenni.cpp" #include <iostream> using namespace cv;
using namespace xn; string Int_to_String(int n); int main (int argc, char **argv)
{
COpenNI openni;
if(!openni.Initial())
return ; namedWindow("color image", CV_WINDOW_AUTOSIZE);
namedWindow("color edge detect", CV_WINDOW_AUTOSIZE);
namedWindow("depth image", CV_WINDOW_AUTOSIZE);
namedWindow("depth edge detect", CV_WINDOW_AUTOSIZE); if(!openni.Start())
return ;
char key=;
int i=, j=;
while((i==)) {//key!=27
if(!openni.UpdateData()) {
return ;
}
/*获取并显示色彩图像*/
Mat color_image_src(openni.image_metadata.YRes(), openni.image_metadata.XRes(),
CV_8UC3, (char *)openni.image_metadata.Data());
Mat color_image;
cvtColor(color_image_src, color_image, CV_RGB2BGR);
imshow("color image", color_image); //保存彩色图像
j = i++;
string str1 = "E:\\OpenCVData\\color\\";
string str11 = "E:\\OpenCVData\\depth\\";
string str2 = ".jpg";
string str3 = str1 + Int_to_String(j) + str2; //彩色图像名称
char * cstr = new char [str2.length()+];
std::strcpy (cstr, str2.c_str());
cout<<cstr; //cvSaveImage(cstr, color_image);
imwrite(str3, color_image); /*对色彩图像进行canny边缘检测并显示*/
Mat color_image_gray, color_image_edge;
cvtColor(color_image_src, color_image_gray, CV_RGB2GRAY);//因为在进行边缘检测的时候只能使用灰度图像
Canny(color_image_gray, color_image_edge, , );
imshow("color edge detect", color_image_edge); /*获取并显示深度图像*/
Mat depth_image_src(openni.depth_metadata.YRes(), openni.depth_metadata.XRes(),
CV_16UC1, (char *)openni.depth_metadata.Data());//因为kinect获取到的深度图像实际上是无符号的16位数据
Mat depth_image, depth_image_edge;
depth_image_src.convertTo(depth_image, CV_8U, 255.0/); //对齐?
imshow("depth image", depth_image); //保存深度图像
string str4 = str11 + Int_to_String(j) + str2; //深度图像名称
imwrite(str4, depth_image); /*计算深度图像的canny边缘并显示*/
Canny(depth_image, depth_image_edge, , );
imshow("depth edge detect", depth_image_edge);
key=cvWaitKey();
} } string Int_to_String(int n)
{
ostringstream stream;
stream<<n; //n为int类型
return stream.str();
}

最新文章

  1. Vue知识点
  2. iOS 按钮小知识点总结
  3. 关于markdown需要澄清的一些误解
  4. java socket通讯(一) 入门示例
  5. CentOS 6.0 图形(图解)安装教程
  6. [改善Java代码]避免带有变长参数的方法重载
  7. [PWA] 4. Hijacking Request
  8. C语言中 移位操作运算
  9. sql还原(.bak文件还原)
  10. (转)mybatis:动态SQL
  11. Shell的基本命令(第一天),根据w3c学习得
  12. JDBC访问数据库的一些小技巧
  13. Python之路,进程、线程、协程篇
  14. SpringBoot的国际化使用
  15. Prometheus监控学习笔记之Prometheus监控简介
  16. Warning: Data truncated for column &#39;xxxx&#39; at row 1
  17. Python 招聘信息爬取及可视化
  18. MySql学习笔记——存储函数
  19. 利用html5调用本地摄像头拍照上传图片[转]
  20. 移动端web页面input限制只能输入数字

热门文章

  1. CSS 基本知识梳理-续
  2. RHCE7-学习里程 root 密码重置换
  3. 在kindeditor 获取textarea 中 输入的值
  4. iOS开发基础控件--UITextField
  5. Scala基础:类和构造器
  6. JAVA集合中的迭代器的遍历
  7. Alpha混合
  8. ubuntu18.04 安装显卡驱动
  9. linux 安装网络监控插件indicator-sysmonitor
  10. string.Empty与null与&quot;&quot;