我再操作的过程是这样做的:
(1)下载好对应版本的软件
(2)单独配置好每一个环境,(下面opencv的实现过程会教你如何以一次实现永久配置PCL配置好以后)用实例去实现一下;
(3)再把他们创建的环境模块导入新建好的项目中,同时添加好Kinect的相关配置,导入代码,运行得到结果。
VS2013,上网找个别的网友提供的资料安装好就可以了。
Kinect 1.7、1.8、2.0版本都是ok的,我个人比较喜欢2.0版本的,我再
学习的过程中是先安好2.0版本,后来发现代码是1版本的,所以.......
版本1的Toolk可能安装不上,我就安装不上,但是没有关系,SDK安装好,有了驱动就可以用了。
opencv2.4.13的安装也没有太多需要注意的。
PCL安装有主意事项,open NI安装的位置,留意一下,具体参考网上资料,大家都对。
注意事项1
每一次安装好一个软件之后,需要去系统环境中添加变量,方法都一样,大家看着一个操作就好了。每次添加完变量记得重启电脑
注意事项2
无论是PCL还是opencv得配置,【debug】对应选择一种:64或者w32
注意事项3
环境配置的时候有【Debug】和【Release】两种,只需要配置【Debug】就好了。
重点
推荐一个大佬写的博客:一次性配置opencv:链接
kinect得配置参考:[添加链接描述](https://blog.csdn.net/u012750277/article/details/54729583)
我只用到下列两项就可以:加入kinect20.lib会报错
项目->属性->C/C++->常规->附加包含目录中添加$(KINECTSDK20_DIR)\inc;
链接器->常规->附加库目录中添加$(KINECTSDK20_DIR)\Lib\x86
#include
#include
// 标准库头文件
#include
#include
#include
// OpenCV头文件
#include
#include
#include
// OpenNI头文件
#include
typedef unsigned char uint8_t;
// namespace
using namespace std;
using namespace openni;
using namespace cv;
using namespace pcl;
void CheckOpenNIError(Status result, string status)
{
if (result != STATUS_OK)
cerr << status << " Error: " << OpenNI::getExtendedError() << endl;
}
int main(int argc, char **argv)
{
Status result = STATUS_OK;
int i, j;
float x = 0.0, y = 0.0, z = 0.0, xx = 0.0;
IplImage *test;
IplImage *test2;
//point cloud
PointCloud cloud;
//opencv image
Mat cvBGRImg;
Mat cvDepthImg;
//OpenNI2 image
VideoFrameRef oniDepthImg;
VideoFrameRef oniColorImg;
namedWindow("depth");
namedWindow("image");
char key = 0;
// 初始化OpenNI
result = OpenNI::initialize();
CheckOpenNIError(result, "initialize context");
// open device
Device device;
result = device.open(openni::ANY_DEVICE);
CheckOpenNIError(result, "open device");
// create depth stream
VideoStream oniDepthStream;
result = oniDepthStream.create(device, openni::SENSOR_DEPTH);
CheckOpenNIError(result, "create depth stream");
// set depth video mode
VideoMode modeDepth;
modeDepth.setResolution(640, 480);
modeDepth.setFps(30);
modeDepth.setPixelFormat(PIXEL_FORMAT_DEPTH_1_MM);
oniDepthStream.setVideoMode(modeDepth);
// start depth stream
result = oniDepthStream.start();
CheckOpenNIError(result, "start depth stream");
// create color stream
VideoStream oniColorStream;
result = oniColorStream.create(device, openni::SENSOR_COLOR);
CheckOpenNIError(result, "create color stream");
// set color video mode
VideoMode modeColor;
modeColor.setResolution(640, 480);
modeColor.setFps(30);
modeColor.setPixelFormat(PIXEL_FORMAT_RGB888);
oniColorStream.setVideoMode(modeColor);
// start color stream
result = oniColorStream.start();
CheckOpenNIError(result, "start color stream");
while (true)
{
// read frame
if (oniColorStream.readFrame(&oniColorImg) == STATUS_OK)
{
// convert data into OpenCV type
Mat cvRGBImg(oniColorImg.getHeight(), oniColorImg.getWidth(), CV_8UC3, (void*)oniColorImg.getData());
cvtColor(cvRGBImg, cvBGRImg, CV_RGB2BGR);
imshow("image", cvBGRImg);
}
if (oniDepthStream.readFrame(&oniDepthImg) == STATUS_OK)
{
Mat cvRawImg16U(oniDepthImg.getHeight(), oniDepthImg.getWidth(), CV_16UC1, (void*)oniDepthImg.getData());
cvRawImg16U.convertTo(cvDepthImg, CV_8U, 255.0 / (oniDepthStream.getMaxPixelValue()));
imshow("depth", cvDepthImg);
}
// quit
if (cv::waitKey(1) == 'q')
break;
// capture depth and color data
if (cv::waitKey(1) == 'c')
{
//get data
DepthPixel *pDepth = (DepthPixel*)oniDepthImg.getData();
//create point cloud
cloud.width = oniDepthImg.getWidth();
cloud.height = oniDepthImg.getHeight();
cloud.is_dense = false;
cloud.points.resize(cloud.width * cloud.height);
test = cvCreateImage(cvSize(cloud.width, cloud.height), IPL_DEPTH_8U, 3);
test2 = &IplImage(cvBGRImg);
for (i = 0; iimageData[i*test2->widthStep + j * 3 + 0];
cloud[i*cloud.width + j].g = (uint8_t)test2->imageData[i*test2->widthStep + j * 3 + 1];
cloud[i*cloud.width + j].r = (uint8_t)test2->imageData[i*test2->widthStep + j * 3 + 2];
test->imageData[i*test->widthStep + j * 3 + 0] = test2->imageData[i*test2->widthStep + j * 3 + 0];
test->imageData[i*test->widthStep + j * 3 + 1] = test2->imageData[i*test2->widthStep + j * 3 + 1];
test->imageData[i*test->widthStep + j * 3 + 2] = test2->imageData[i*test2->widthStep + j * 3 + 2];
}
}
cvSaveImage("test.jpg", test);
pcl::io::savePCDFileBinaryCompressed("test_pcdc.pcd", cloud);
cerr << "Saved " << cloud.points.size() << " data points to test_pcd.pcd." << endl;
imwrite("c_color.jpg", cvBGRImg);
imwrite("c_depth.jpg", cvDepthImg);
/*for(size_t i=0;i
如有任何问题,可以查看主页的联系方式联系我。我的原始项目代码可见于:可以下载完整的,需要5个积分,不是我定的,搜索我的主页应该能找到,题目是一样的。