C++ 变化光照条件下的多运动目标检测。

C++ 变化光照条件下的多运动目标检测。,c++,opencv,background,edge-detection,image-segmentation,C++,Opencv,Background,Edge Detection,Image Segmentation,我试图提取视频帧中的几个移动对象,并将它们提取为前景。数据来自视频帧 当前的问题是:灯光正在变化,因此存在一些阴影,或比实际背景更亮的部分。这导致通过OpenCV-MoG背景分割方法提取虚假背景/前景 对于这一点,我没有得到任何简单的方法,但我有这样一个想法:如果我能在前一帧中提取这些移动对象的边缘,那么也许我可以在下一帧中使用类似于SIFT的算法来跟踪它们,看看它们在哪里,并将它们视为前景 我认为在这种情况下,光线变化不会影响结果。如果我在这一点上是正确的,那么我的问题是: 如何使用OpenC

我试图提取视频帧中的几个移动对象,并将它们提取为前景。数据来自
视频帧

当前的问题是:灯光正在变化,因此存在一些阴影,或比实际背景更亮的部分。这导致通过
OpenCV-MoG
背景分割方法提取虚假背景/前景

对于这一点,我没有得到任何简单的方法,但我有这样一个想法:如果我能在前一帧中提取这些移动对象的边缘,那么也许我可以在下一帧中使用类似于
SIFT
的算法来跟踪它们,看看它们在哪里,并将它们视为前景

我认为在这种情况下,光线变化不会影响结果。如果我在这一点上是正确的,那么我的问题是:

如何使用OpenCV有效地检测这些移动对象的边缘?如果我需要在OpenCV中使用
SIFT
算法,它是免费提供的吗?从网络上,我看到它是非自由的,对吗

我的第二个问题是:有人对此有更好的想法吗


多谢各位

如果你想进行人体检测/跟踪,你应该寻找与此相关的研究论文或项目。有很多,你甚至可以在SOF上找到一些关于这个主题的问题:

(可能过时)

此外,还有几个问题涉及到特征检测器/描述符,如SIFT及其最新的替代品(SURF、ORB、FRANK,仅举一些在OpenCV中实现的例子):

简单地说,SIFT不是一种跟踪运动对象的算法,它是检测图像区域,这些区域在某种程度上是唯一的,并且对几种失真(平移、旋转、缩放…)具有鲁棒性。也就是说,以后可以在不同的图像条件下检测到相同的特征。您确实可以使用类似SIFT的算法来识别对象,但对于人员跟踪,可能有更好的选择。 对于这些图像区域,你可以应用一些跟踪算法,例如光流,但是还有一些更具体的用于人体跟踪的算法

SIFT和SURF在OpenCV中“免费”提供,但其中的一部分已获得专利,因此人们避免使用它们,因此它们在未来不会因这些专利而出现问题-这就是它们迁移到“非自由”OpenCV模块的原因


除了您提到的光线问题外,您还将遇到其他问题,如对象遮挡和人员进出场景。

我知道您已经接受了Rui的答案,但在谷歌搜索之后,我找到了解决您问题的另一个方法-它是

不幸的是,我不熟悉这个描述符,所以我无法帮助您实现,但是,在谷歌搜索之后,我发现这个描述符是


请看一看人体检测代码。

我可以建议您对图像进行标准化以进行照明吗。一种实用的方法是使用“直方图匹配”

请看一看,了解如何使用直方图匹配


希望这有助于

你可以考虑一个简单的边缘检测器(Sobel,Laplace等)。问题是,如何从背景中的其他边缘中确定运动对象的边缘,然后在SIFT等中跟踪它们,特别是在光照条件变化的情况下。你知道吗?你知道你想识别的物体(颜色、形状等)吗?我想做人体检测,但他们衣服的颜色可能不同。谢谢你的回答。我会仔细阅读你给出的链接,以及关于光线变化条件下物体遮挡的链接。亲爱的阿斯特,非常感谢你的回答。我也会看看他们。关于。我正要提到猪,但不确定:)这里有一个关于猪的链接: