2013-03-12 55 views
1

简短介绍:增强现实项目对象跟踪openCV,问题,建议?

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

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

因此,精确地检测盖的我第一次测试的几种方法具有里程碑意义的(S):

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

....我在正确的路上吗? ^^ 我很欣赏任何有关使用cap来定位用户头部以及我必须在OpenCV库中使用的不同功能的建议。

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

非常感谢!

回答

2

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

颜色跟踪使用直方图和均值漂移

下面是一个替代的颜色检测方法,使用直方图: 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)(也是概率图)上运行算法。您可以从OpenCV图像中提取ROI,这些图像本身就是图像,并且可以像运行整个图像一样运行OpenCV的算法。例如,您可以计算检测到的脸部周围ROI的概率图。同样,meanshift/camshift算法只应该在这个较小的地图上运行。同样,检测正方形或圆形的附加步骤也是如此。详情可以在OpenCV书籍中找到,也可以在线快速搜索。

编译的OpenCV与TBB和CUDA

简单地用TBB(线程构建模块)编译的OpenCV库许多的OpenCV算法可以实现显著速度提升,而不程序员需要做任何额外的工作并开启了CUDA支持。特别是,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 vs C++的优点展开一场火焰战。

希望这会有所帮助。