前些时间写了篇文章把我在做这个项目中遇到的问题以及思路说了一下,传送门:
http://jcs130.iteye.com/blog/2185533
在上篇文章的思路下作了实现,已经达到了教授的要求。
首先第一步检测四个角的坐标,经试验,在这个高度上把标记直接打印成一张A4纸的大小就可以直接识别:
我还发现,这个硬件本身的深度数据有点问题,如下图所示,靠近墙的一侧颜色较量说明距离值较近,离墙远的地方有一个小区域几乎是黑色,说明很远,所以如果想要对深度数据进行二值化处理必须要用一个可变的阈值。
我在这里用的方法是先记录四个顶点的距离,找出最远距离和最近距离并假设距离的变化是线性的,再根据实际情况在某特定区域上加加减减来确定最终的阈值。
确定阈值后执行二值化,二值化后会有很多细小的噪点,使用均值滤波器过滤并且使用膨胀的方法联通路相邻的像素点,再进行轮廓检测确定感兴趣的区域大小,如下图所示:
因为深度图像和彩色图像之间存在偏差,手动的去修正这个坐标上的偏差,并且对彩色图像依次进行放大->二值化->膨胀->腐蚀操作,再把经过处理后的图片使用ArUco进行识别,得到标记的ID以及四个顶点的坐标。如下图所示:(中间为原是大小,左边的为放大后的图片,右边为经过处理后的图片,已经可以成功识别)
下图就是程序运行时的图片输出,可以看到程序运行时的流程,为了加快处理速度,使用了CUDA显卡加速功能,速度绝对是大于教授提出的5FPS的要求了~
最后教授说比较直观的做法是在图片上画出标记的轮廓以及编号,并且输出的坐标应该是相对于实际坐标系的而不是直接输出像素坐标,另外最好可以给出让用户修改配置的功能(因为教授想把我的程序加到他另外一个程序中,所以不需要图形界面),所以我又加上了配置文件,这样用户可以通过修改配置文件来修改参数,最终效果如下图所示:(我故意把基准坐标系(红色箭头)弄歪来测试坐标变换的结果)
项目总结:
这个项目教授本来想找一个有很强的图像处理基础的同学来做,但是做完这个项目后个人觉也不需要,因为我本身接触图像处理仅限于知道些概念,具体实现表示完全不清楚,但是我觉得这个并不阻碍我最后做出这个项目,在做这个项目之前我几乎没有用过C++,也只是知道OpenCV可以用来作图像处理,也并没有实际使用的经验。这就是所谓项目驱动吧,只要是觉得自己感兴趣,就去做,不要因为自己不会做而直接拒绝,技术日新月异,我们不可能全都掌握,但是我们可以锻炼自己的学习能力,这样就可以保持自己的竞争力,与大家共勉。
最后附上最终演示视频的链接:
http://www.tudou.com/programs/view/n13nkgCPA8s/
相关推荐
在探讨如何构建基于OpenNI2、OpenCV2以及NITE2的开发环境之前,我们首先来了解一下这些技术的基本概念及其在计算机视觉领域的应用价值。 **OpenNI(Open Natural Interaction)** 是一个开源框架,它允许开发者创建...
本文来结合下opencv的highgui功能显示kinect采集得来的颜色图和深度图。本来在opencv中自带了VideoCapture类的,使用该类可以直接驱动kinect设备,具体的可以参考下面的文章:...
OpenNI、OpenCV 安装与开发环境配置 OpenNI 安装与配置: 在开发环境中,OpenNI 是一个非常重要的组件,它可以帮助开发者捕捉到 Kinect 传感器的数据,并将其转换为可以用于开发应用程序的格式。为了安装 OpenNI,...
在计算机视觉领域,OpenNI(Open Natural Interaction)是一个开源框架,用于与传感器设备交互,如Kinect,以获取和处理深度图像和彩色图像。OpenNI提供了API,使得开发者能够轻松地读取和显示这些图像数据。另一...
OpenNI2是一个开源的中间件,旨在简化与各种3D传感器(如Asus XtionProLive)的交互,而OpenCV则是一个强大的计算机视觉库,用于处理图像数据。 首先,让我们了解OpenNI2的基本概念。OpenNI2提供了一个编程接口...
3. **数据流管理**:OpenNI2可以同时处理多个数据流,如深度图像、颜色图像和骨骼跟踪数据,方便进行复杂的计算机视觉和运动分析任务。 4. **简单的编程接口**:使用C++和C#的API,开发者可以快速集成OpenNI2到他们...
OpenGL、OpenCV与OpenNI是计算机视觉领域常用的三个库,它们各自有着独特的功能,并且可以协同工作以实现复杂的图像处理和计算机视觉任务。在本文中,我们将深入探讨这些库的特性,以及如何在Visual Studio 2010环境...
OpenNI2是一个用于与RGB-D(彩色+深度)传感器交互的中间件,它支持诸如Xtion、Astra和Primesense等设备。这些相机因其能够同时提供彩色图像和深度信息而被广泛应用于机器人视觉、3D建模和避障等领域。 `openni2_...
5. **开发环境集成**:OpenNI和Nite2通常与C++或C#编程语言配合使用,提供了丰富的API和示例代码,便于开发者在Visual Studio等环境中进行开发。 6. **跨平台支持**:尽管最初是针对Windows平台开发的,但经过社区...
总的来说,OpenNI2为开发者提供了一个强大且灵活的框架,用于在Ubuntu上与3D传感器进行交互,它简化了设备的连接、数据获取和处理流程,促进了各种应用的开发,如机器人导航、3D建模和手势识别。
《OpenNI2官方开发手册》是为开发者提供的一份详尽指南,主要涵盖了OpenNI2框架中的各个类和函数的使用方法。OpenNI2是一个开源的接口库,它为开发人员提供了一种标准的方式来访问各种传感器,特别是针对自然交互和...
为了提升这些数据处理的效率与精确度,OPENNI2框架下的Kinect.dll文件成为了重要的工具之一。这篇文章将深入探讨OPENNI2 Kinect.dll的功能、重要性以及如何使用它来实现深度图与彩色图的对齐。 Kinect传感器的使用...
openni2_install,astra_driver device
OpenNI(开源自然交互)是一个开源软件开发工具包,它使得硬件如Kinect能够提供深度图像和其他传感器数据,而OpenCV(开源计算机视觉库)则用于处理这些图像数据,进行分析和识别。 首先,我们来看看OpenNI。OpenNI...
OpenNI2 帮助手册中文翻译,更好的掌握Openni,体感互动不可或缺
OpenNI2是一个开源的接口库,它为开发人员提供了一个标准化的方式来与多种3D传感器(如Kinect)进行交互,获取包括颜色图像、深度图像等数据。 在这一项目中,开发者运用了Adaboost算法来检测人脸。Adaboost是一种...
该资源使Peoplebot机器人跟随使用ROS + OpenNI + Python + OpenCV + P2OS驱动程序的人员。 所有这些都是ROS Indigo软件包的一部分。 依赖项: cv_bridge geometry_msgs p2os_msgs 罗斯科普 红润的 sensor_msgs ...
OpenNI2 是一个开源的开发接口,用于与各种传感器(如Kinect,PrimeSense等)交互,以便在各种平台上进行自然交互和计算机视觉应用。它提供了简单易用的API,让开发者可以方便地访问和处理来自3D深度相机的数据,如...
本程序借助opencv与openni类库 实时提取kinect sensor探测到的数据,其中原始rgb彩色图像数据(24bit )接口已经标注明确.... 深度图与原始rgb彩色图像也已经标定完成,所以有兴趣做图像信息融合的朋友可以一试
本例是利用OpenNI和OpenCV完成.oni格式视频的采集,介绍了利用Kinect相机采集视频的方法。