1

简介:增强现实项目

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

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

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

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

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

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

十分感谢 !

4

1 回答 1

3

我想到的一种快速方法是将两种方法结合起来。

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

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

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

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

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

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

此外,如果您希望进一步确认这个最终位置,您可以在帽的正面添加 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++ 的优点展开一场激烈的战争。

希望这可以帮助。

于 2013-03-12T04:54:27.153 回答