opencv - 使用 Kinect 检测地板上的物体

标签 opencv geometry computer-vision kinect openni

假设我有一个指向地板的 kinect。

如果我在地板上放置 3 或 4 个物体,我如何确定这些物体所在的平面?

如何检测该楼层上颜色鲜艳的物体?

最佳答案

Kinect 返回给你一个矩阵 deph-map,表示任何表面到传感器的距离,并遵循 pinhole camera model可以将每个深度测量值与相应的 RGB 值对齐。我认为您已经知道如何将深度矩阵的每个像素与其在空间上的 X、Y、Z 及其 RGB 值相关联。如果没有,您需要执行 further research并了解如何在深度传感器和 RGB 相机之间完成立体相关。

您在这里问了两个完全不同的问题。第一个问题很容易用一些基本的几何概念解决,但必须先解决第二个问题才能找到物体在空间中的位置。

有几种方法可以找到颜色鲜艳的对象。如果您的传感器将记录静态场景,则可以使用 Background Subsctraction .这将为您生成一个二进制图像,表示具有与先前训练的背景模型不同的值的像素。由于您的对象明显比背景颜色更亮,您可以简单地应用 Thresholding Segmentation。 .只需将 RGB 转换为 HSL图像并寻找更高的亮度值。还有其他几种方法,如果这些方法不能解决您的问题,请研究它们。遵循这两种方法都会返回一个带有 Blob 的二值图像。您可以使用这些 Blob 的中心作为颜色鲜艳的对象的矩阵坐标。

有了 3 个中心 Blob A'、B' 和 C',您将能够找到您正在寻找的平面,如下图所示:

Finding the plane

说明:一个平面可以表示为一个点(位置)和一个法线(方向)。考虑到您的所有对象都将恰好位于您要查找的平面上,您只需要 3 个点 A、B、C,它们将代表该平面内的三角形。此三角形法线等于 (A - B) x (C - B) - 此处 x 表示叉积 - 与平面相同。所以,你的飞机将是这 3 个点中的任何一个和那个三角形法线。如果对象的尺寸很大,您需要将它们考虑在内以定义您的平面位置。

关于opencv - 使用 Kinect 检测地板上的物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9191994/

相关文章:

visual-studio - 尝试使用Visual Studio编译OpenCv文件时出现链接器错误

css - Firefox 中 CSS 形状的抗锯齿

python-3.x - 使用 OpenCV 从图像中减去一条线

matlab - 相机标定的疑惑

java - 对 3D 空间中点数组的近似形状进行分类

swift avfoundation AVCapturePhotoCaptureDelegate 捕获方法

c++ - videowriter 功能不使用 opencv-3.0.0 保存文件

opencv - 无法在 OpenCV for python 中获取双击事件

python - 创建 Numpy 图像数组

performance - 三角函数的效率/速度