简介:增强现实项目
目标:在某人的头上加载三维发型模板。
因此,我使用OpenCV来跟踪用户的脸,然后我必须跟踪用户的上限(我们假设用户有一个上限,我们可以决定用户的标志或者我们需要的任何东西来检测它)。一旦我检测到地标,我必须获得地标的坐标,然后将它发送到3D引擎来启动/更新3D对象。
因此,为了准确地检测帽子的地标,我首先测试了几种方法:
我今天来找你是为了和你一起考虑。帽子上需要特殊的地标吗?(如果是,是哪一个?如果没有,我该怎么办?)把颜色的检测和形式的检测混为一谈是个好主意吗?
……我是在正确的道路上吗?^^我很感激关于使用上限来定位用户头部的任何建议,以及在OpenCV库中必须使用的不同功能。
如果我的英语不完美的话,对不起。
非常感谢你!
发布于 2013-03-12 04:54:27
一个快速的方法,从我的头顶,是结合这两种方法。
基于直方图和均值移位的颜色跟踪
下面是一种使用直方图的替代颜色检测方法:基于计算机视觉的鲁棒手检测
这个想法是这样的:对于已知颜色的上限,比如亮绿色/蓝色(就像你看到的图像垫面屏幕上的颜色),您可以只使用色调和饱和度颜色通道预先计算直方图。我们故意排除光通道,以使它更强大的照明变化。现在,使用直方图,您可以创建一个反投影映射,即在图像中的每个像素处都有一个概率值的掩码,表示那里的颜色是帽子颜色的概率。
现在,在获得概率图之后,您可以在此概率地图(而不是图像)上运行均值漂移或凸轮移位算法(在OpenCV中可用),初始窗口位于使用OpenCV算法检测到的脸的上方。这个窗口最终将以概率分布的模式结束,即上限。
详细信息在我上面给出的健壮手检测链接中。要了解更多细节,您应该考虑获取官方的OpenCV书籍,或者从本地图书馆借阅它。有一个非常好的一章,使用均值漂移和凸轮偏移跟踪对象。或者,只需搜索网页使用任何查询沿测量/凸轮移动为目标跟踪。
检测方格/圆以获得头部的方位
此外,如果您希望进一步确认这个最终位置,您可以在上限前面添加4个小方块/圆圈,并使用OpenCV的内置算法仅在感兴趣区域(ROI)中检测它们。就像检测那些QR码中的方块一样。这一步进一步给你关于帽子的方向,因此,头部的信息,这可能是有用的,当你渲染头发。例如,在找到两个相邻的正方形/圆圈后,你可以计算它们与水平/垂直线之间的角度。
您可以在OpenCV中使用标准的角检测器等来检测方格/角点。对于圆圈,可以尝试使用HoughCircle算法:detection.html#houghcircles
加速这件事
广泛使用利益区域(ROIs)
为了加快速度,您应该尽可能多地在图像的小区域(ROIs)(也就是概率图)上运行您的算法。您可以从OpenCV图像(它们本身就是图像)中提取ROI,并在它们上运行OpenCV的算法,就像在整个图像上运行它们一样。例如,您可以计算检测到的人脸周围的ROI的概率图。同样,meanshift/camshift算法只能在这个较小的映射上运行。同样,对于检测方格或圆圈的附加步骤也是如此。详细信息可以在OpenCV的书中找到,也可以在线快速搜索。
用TBB和CUDA编译OpenCV
许多OpenCV算法可以实现显着的速度提高,而程序员只需通过使用TBB (线程构建块)编译OpenCV库和打开CUDA支持就可以完成任何额外的工作。特别是,OpenCV中的人脸检测算法(Viola )的运行速度要快几倍。
只有在安装了TBB和CUDA软件包之后,才能打开这些选项。
TBB:http://threadingbuildingblocks.org/download
库达:https://developer.nvidia.com/cuda-downloads
然后从源: OpenCV编译Install.html#windows-安装
最后,我不确定您是否在使用OpenCV的"C版本“。除非严格需要(兼容性问题等),否则我建议使用OpenCV的OpenCV接口,因为它更方便(至少从我个人的经验来看)。现在,让我先说一句,我不打算在C和C++之间展开一场火焰之战。
希望这能有所帮助。
https://stackoverflow.com/questions/15352074
复制相似问题