图像减法的OpenCv问题?

图像减法的OpenCv问题?,opencv,background-subtraction,Opencv,Background Subtraction,我尝试使用函数cvAbsDiff(img1、img2、dest)减去2个图像; 它工作,但有时当我把我的手之前,我的头或身体的手是不清楚,背景进入图片。。。背景图像(头部)覆盖在我的前景上 它可以在平面上正常工作,即背景甚至像墙一样 请查看我的图片…以便您更好地了解我的问题 如果您有任何解决方案/提示,请帮助我……输入相关代码会有所帮助。也知道你真正想要达到的目标 你在减去哪两幅图像?我已经减去了后续图像(因此,延迟了几分之一秒拍摄的图像),背景减去通常会产生移动对象的边缘,例如手的边缘,而不

我尝试使用函数cvAbsDiff(img1、img2、dest)减去2个图像; 它工作,但有时当我把我的手之前,我的头或身体的手是不清楚,背景进入图片。。。背景图像(头部)覆盖在我的前景上

它可以在平面上正常工作,即背景甚至像墙一样

请查看我的图片…以便您更好地了解我的问题


如果您有任何解决方案/提示,请帮助我……

输入相关代码会有所帮助。也知道你真正想要达到的目标

你在减去哪两幅图像?我已经减去了后续图像(因此,延迟了几分之一秒拍摄的图像),背景减去通常会产生移动对象的边缘,例如手的边缘,而不是手的整个轮廓。我猜您正在考虑当前帧和静态启动帧的差异。有可能零件差异不够大(蒙皮+蒙皮)

今晚我有一些电脑问题,明天我会测试(请至少列出你实际执行的步骤),然后让你知道


我仍然不确定你的最终目标是什么,尽管我猜你想做一些手势识别(因为你有一个称为“手指”的向量)。 正如曼普里特所说,你最大的问题是鲁棒性,这是来自于具有相似颜色的受试者

我把我的脸放在静态比较图像中,然后移动它,从而复制了你的图像。如果我只从背景开始,它已经更加健壮了,而且在任何情况下都不会显示任何“叠加”

快速解决方法是,确保有一个干净的主题免费静态图像。 否则,您将需要动态比较图像,最简单的方法是将第n帧与第n-1帧进行比较。这通常只会给你移动的边缘,所以如果你想要整个轮廓,你可以:

1) 使用不同的分割算法(我推荐。背景减法很快,您可以使用它来确定要搜索的较小ROI,然后使用不同的算法进行更稳健的分割。)

2) 尝试在静态和动态比较图像之间进行折衷,例如,作为过去10帧的平均值或类似值。我不知道这有多好,但实现起来很简单,值得一试:)

另外,尝试使用CV_THRESH_OTSU而不是30作为阈值,看看您是否更喜欢它


此外,我经常注意到输出光斑(没有从黑色变为白色的区域)。通过现场直播检查,我很确定这是因为网络摄像头自动对焦/调整白平衡等。。如果你也遇到了这种情况,关闭自动对焦等应该会有所帮助(顺便说一句,这不是通过openCV完成的,而是取决于相机。可能检查一下:)

你的代码没有问题。背景减法不是运动检测或silhoutte检测的首选方法,因为它的鲁棒性不强。问题的出现是因为背景和前景在许多区域的颜色相似,在减法中将前景向后推。你可以尝试使用 -用于运动检测的光流 -如果你的任务只是检测锡尔霍特或手,试着在上面训练一个猪分类器


以防您不想尝试新方法。你们可以试着使用阈值(在你们的例子中是30),所以当你们减去相似的彩色图像时,差值小于30。然后你设定30的阈值,这样它就变黑了。您也可以尝试HSV或其他颜色空间。

您是对的。。我确实拍摄了一张静态图像,然后尝试从网络摄像头查询图像中减去它。。。。这是我的密码…你是对的。。我做了一个静态图像,然后尝试从网络摄像头查询图像中减去它。。。这是我代码的链接…请帮助。我为你的代码添加了一个更具体的答案。希望这能有所帮助,但这取决于你真正想要实现的目标。另一方面,除非你有特殊的原因,否则我建议采用OpenCV的新C++标准,即使用Mat来代替你的图像。但是如果是因为你所说的,即背景和前景是相同的颜色,那么它应该只减去它。不是吗?有什么方法可以将前景置于背景之前吗?