运行后,采集的数据保存到: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 1; 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 1; char key=0; int i=0, j=0; while((i==0)) {//key!=27 if(!openni.UpdateData()) { return 1; } /*获取并显示色彩图像*/ 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()+1]; 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, 5, 100); 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/8000); //对齐? imshow("depth image", depth_image); //保存深度图像 string str4 = str11 + Int_to_String(j) + str2; //深度图像名称 imwrite(str4, depth_image); /*计算深度图像的canny边缘并显示*/ Canny(depth_image, depth_image_edge, 5, 100); imshow("depth edge detect", depth_image_edge); key=cvWaitKey(30); } } string Int_to_String(int n) { ostringstream stream; stream<<n; //n为int类型 return stream.str(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)