首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标跟踪openCV,问题,建议?

目标跟踪openCV,问题,建议?
EN

Stack Overflow用户
提问于 2013-03-12 02:08:03
回答 1查看 1.9K关注 0票数 1

简介:增强现实项目

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

因此,我使用OpenCV来跟踪用户的脸,然后我必须跟踪用户的上限(我们假设用户有一个上限,我们可以决定用户的标志或者我们需要的任何东西来检测它)。一旦我检测到地标,我必须获得地标的坐标,然后将它发送到3D引擎来启动/更新3D对象。

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

  • cvFindChessBoardCorner ...在平面图表面上非常有效,但没有上限(http://dsynflo.blogspot.com/2010/06/simplar-augmented-reality-for-opencv.html)
  • 颜色检测(http://www.aishack.in/2010/07/tracking-colored-objects-in-opencv/) .不是很有效率。如果光度变了颜色也会变..。

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

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

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

非常感谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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++之间展开一场火焰之战。

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15352074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档