【问题标题】:Object tracking openCV, questions, advices?对象跟踪openCV,问题,建议?
【发布时间】:2013-03-12 02:08:03
【问题描述】:

简短介绍:增强现实项目

目标:在某人的头上加载 3D 发型模板。

所以我使用 OpenCV 来跟踪人的面部,然后我必须跟踪帽子(我们假设用户有帽子,我们可以决定一个地标或帽子上我们需要检测它的所有东西)的用户。一旦检测到地标,我必须获取地标的坐标,然后将其发送到 3D 引擎以启动/更新 3D 对象。

所以,为了准确检测帽子的地标,我首先测试了几种方法:

我今天来找你是想和你一起考虑。帽子上需要特殊的地标吗? (如果是,是哪一个?如果不是,我该怎么办?) 将颜色检测和形状检测混在一起是不是一个好主意?

....我走对了吗? ^^ 我很感激任何关于使用帽子来瞄准用户头部的建议,以及我必须在 OpenCV 库中使用的不同功能。

对不起,如果我的英语不完美。

非常感谢!

【问题讨论】:

    标签: opencv colors tracking face-detection


    【解决方案1】:

    我想到的一种快速方法是结合这两种方法。

    使用直方图和均值偏移进行颜色跟踪

    这是使用直方图的另一种颜色检测方法: Robust Hand Detection via Computer Vision

    这个想法是这样的: 对于已知颜色的上限,比如亮绿色/蓝色(就像您在图像抠图屏幕上看到的那种颜色),您可以仅使用色调和饱和度颜色通道预先计算直方图。我们故意排除亮度通道,使其对光照变化更加稳健。现在,使用直方图,您可以创建一个反投影图,即一个蒙版,在图像中的每个像素处都有一个概率值,表示那里的颜色是帽子颜色的概率。

    现在,在获得概率图后,您可以在此概率图(不是图像)上运行 meanshiftcamshift 算法(在 OpenCV 中可用),并将初始窗口放置在您使用检测到的面部上方的某个位置OpenCV的算法。这个窗口最终会以概率分布的模式结束,即上限。

    详细信息在我上面给出的鲁棒手部检测的链接中。有关更多详细信息,您应该考虑获取官方 OpenCV 书籍或从当地图书馆借阅。关于使用 meanshift 和 camshift 跟踪对象有一个非常好的章节。或者,只需使用沿 meashift/camshift 的任何查询搜索网络以进行对象跟踪。

    检测正方形/圆形以获取头部方向

    如果您还想进一步确认这个最终位置,您可以在帽的正面添加 4 个小方块/圆圈,并使用 OpenCV 的内置算法仅在此感兴趣区域 (ROI) 中检测它们。这有点像检测那些二维码中的方块。此步骤进一步为您提供有关帽子方向以及头部方向的信息,这在您渲染头发时可能很有用。例如。找到 2 个相邻的正方形/圆形后,您可以计算它们与水平/垂直线之间的角度。

    您可以使用 OpenCV 中的标准角检测器等检测正方形/角。 对于圆圈,您可以尝试使用 HoughCircle 算法:http://docs.opencv.org/modules/imgproc/doc/feature_detection.html#houghcircles

    加快速度

    广泛使用感兴趣区域 (ROI)

    为了加快速度,您应该尽可能多地在图像的小区域 (ROI)(也是概率图)上运行算法。您可以从 OpenCV 图像中提取 ROI,这些图像本身就是图像,并在它们上运行 OpenCV 的算法,就像在整个图像上运行它们一样。例如,您可以计算检测到的面部周围 ROI 的概率图。同样,meanshift/camshift 算法应该只在这个较小的地图上运行。同样对于检测正方形或圆形的附加步骤。详细信息可以在 OpenCV 书籍以及在线快速搜索中找到。

    用 TBB 和 CUDA 编译 OpenCV

    许多 OpenCV 的算法可以实现显着的速度提升,而程序员无需做任何额外的工作,只需在 TBB(线程构建块)和 CUDA 支持开启的情况下编译 OpenCV 库即可。特别是,OpenCV (Viola Jones) 中的人脸检测算法运行速度会快几倍。

    只有在安装了 TBB 和 CUDA 的软件包后才能打开这些选项。

    待定:http://threadingbuildingblocks.org/download

    CUDA:https://developer.nvidia.com/cuda-downloads

    然后从源代码编译OpenCV:http://docs.opencv.org/doc/tutorials/introduction/windows_install/windows_install.html#windows-installation

    最后,我不确定您是否使用的是 OpenCV 的“C 版本”。除非绝对必要(出于兼容性问题等),否则我建议使用 OpenCV 的 C++ 接口,因为它更方便(至少从我个人的经验来看)。现在让我先声明,我不打算在此声明中就 C 与 C++ 的优点展开一场激烈的战争。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-09
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多