对象跟踪openCV,问题,建议?

时间:2013-03-12 02:08:03

标签: opencv colors tracking face-detection

简介:增强现实项目

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

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

因此,为了精确检测上限的标志,我首先测试了几种方法:

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

....我是正确的吗? ^^ 我很感激有关使用限额来定位用户头部的任何建议,以及我必须在OpenCV库中使用的不同功能。

如果不完美,我很抱歉。

非常感谢你!

1 个答案:

答案 0 :(得分:3)

一个快速的方法,在我的头顶,是结合两种方法。

使用直方图和平均移位进行色彩跟踪

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

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

现在,在获得概率图之后,您可以在此概率图(不是图像)上运行meanshiftcamshift算法(在OpenCV中可用),初始窗口位于面对你使用OpenCV算法检测到的。该窗口最终将以概率分布的模式结束,即上限。

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

检测方块/圆圈以获取头部方向

如果您希望进一步确认最终位置,可以在封面的前面添加4个小方块/圆圈,并使用OpenCV的内置算法仅在此感兴趣区域(ROI)中检测它们。它有点像检测那些QR码中的方块。此步骤进一步为您提供有关帽子方向的信息,因此还有头部,这可能在您渲染头发时很有用。例如。找到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的软件包后才能打开这些选项。

TBB: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 ++的优点展开激烈的战争。

希望这有帮助。