一开始,我只需要捕获 RGBstream 并将其转换为一系列 opencv 图像。应该不难,但是我在网上找到了不止一个代码,但是它们不能在我的电脑上运行。不知道哪里错了。
你能给我推荐一个非常简单的代码教程,让我了解如何使用 Kinect 库吗? 一开始我尝试了 Kinect sdk,过了一会儿选择了 OPENNI。
帮帮我,谢谢!
ps: 我正在使用 c++ 和 VISUAL STUDIO 2010
最佳答案
AFAIK 开箱即用 OpenCV 支持 OpenNI 1.5.x。 如果您还没有安装 OpenNI,请先按照以下特定顺序(这很重要)安装:
- 安装 OpenNI 1.5.7
- 安装 NITE(兼容 1.5.7)
- 如果您使用的是 Kinect(而不是 Asus)传感器,还要安装 Avin's SensorKinect driver
此时您应该已经安装了 OpenNI,所以请继续运行其中一个示例。
默认情况下,预构建的 opencv 库未使用 OpenCV 支持进行编译,因此您需要从源代码构建 opencv 以启用 OpenNI 支持。
安装 CMakeGUI如果你还没有这样做的话。这将允许您轻松配置 opencv 构建过程。运行它,浏览到 opencv 源文件夹,选择一个目标目录来放置你的构建文件并点击配置。
您应该有一个很大的选项列表。如果你滚动,你应该看到检测到 OpenNI 安装文件夹(如果没有,你应该修复路径),你也应该和 WITH_OPENNI
标记你可以启用。
当你完成后按生成,它应该生成你需要的 visual studio 项目文件来轻松编译 opencv 库。
有关在 Windows 上从源代码构建 opencv 的更多详细信息,请查看 official documentation
当你完成编译后,你应该已经构建了支持 openni 的 opencv,你应该能够运行一些简单的东西:
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(){
cout << "opening device(s)" << endl;
VideoCapture sensor1;
sensor1.open(CV_CAP_OPENNI);
if( !sensor1.isOpened() ){
cout << "Can not open capture object 1." << endl;
return -1;
}
for(;;){
Mat depth1;
if( !sensor1.grab() ){
cout << "Sensor1 can not grab images." << endl;
return -1;
}else if( sensor1.retrieve( depth1, CV_CAP_OPENNI_DEPTH_MAP ) ) imshow("depth1",depth1);
if( waitKey( 30 ) == 27 ) break;//ESC to exit
}
}
另见 this similar answer . 如果您需要使用 OpenNI 2.x,请参阅以下资源:
关于c++ - 如何在 openni 和 opencv 中使用 Kinect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22531480/