Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 求手的边界区域_Opencv_Image Processing_Computer Vision_Detection - Fatal编程技术网

Opencv 求手的边界区域

Opencv 求手的边界区域,opencv,image-processing,computer-vision,detection,Opencv,Image Processing,Computer Vision,Detection,我有手的图像,这是使用链接检测到的。它的手部检测使用HSV颜色空间 现在我面临一个问题:我需要得到封闭区域/绘制足够可能的边界线来确定手部区域,然后填充封闭区域并从原始区域中减去它以移除手部 到目前为止,我已经尝试过模糊图像以减少噪音、放大图像、关闭孔洞等,这些似乎是过量的。我尝试过等高线,这似乎是迄今为止最好的方法。我试图得到凸包(最大的),在使用不同的阈值进行测试后,我得到了以下结果 当船体变直时,可以用拇指看到不准确的情况。它必须是弯曲的。我试图找出手的位置,以便识别手所覆盖的区域。将其

我有手的图像,这是使用链接检测到的。它的手部检测使用HSV颜色空间

现在我面临一个问题:我需要得到封闭区域/绘制足够可能的边界线来确定手部区域,然后填充封闭区域并从原始区域中减去它以移除手部

到目前为止,我已经尝试过模糊图像以减少噪音、放大图像、关闭孔洞等,这些似乎是过量的。我尝试过等高线,这似乎是迄今为止最好的方法。我试图得到凸包(最大的),在使用不同的阈值进行测试后,我得到了以下结果

当船体变直时,可以用拇指看到不准确的情况。它必须是弯曲的。我试图找出手的位置,以便识别手所覆盖的区域。将其减去以从原始图像中删除手。这就是我想要实现的目标

有没有更好的方法

非常感谢您的想法和建议

原始和检测结果如下所示


假设您想要识别手部区域而不是凸包所提供的区域,并且应用程序的背景至少是相同的颜色,如果可能的话,我将应用hsv阈值来识别背景而不是手部。或者,如果光分布不一致,可能是自适应阈值。我相信很多应用程序都是这样做的


如果背景不能被固定,分割不是一个容易解决的问题,因为你应该照顾阴影和掌纹。

而不是凸包,考虑使用<强> alpha船体< /强>,它可以更好地跟随形状的轮廓,允许凹凸。 这个网站对阿尔法形状有一个很好的总结:“关于阿尔法形状你一直想知道但不敢问的一切”,作者是弗朗索瓦·贝莱尔

正如戴维在文章中提到的,考虑使用HSV(或HSI)颜色空间进行阈值化,而不是在RGB或灰度上进行阈值处理。如果您可以允许更长的处理时间,您可以使用Mean Shift等算法来分割像您这样的复杂图像。OpenCV实现了均值漂移,而《学习OpenCV》一书提供了算法的简明描述


无论如何,标准的二值化阈值似乎没有多大帮助。考虑使用动态阈值;据我回忆,OpenCV中的轮廓至少实现了局部/动态阈值。

因此,您希望识别手部区域,而不是凸面外壳提供的区域。我说的对吗?我会说,手罩的图像部分我正在使用HSV空间来检测手,这似乎正是我想要的。我将不得不看看它是否也在OpenCV中,你能获得更清晰的焦点吗?您可以使用漫反射照明(“阴天”照明)来减少阴影,或使用角度照明来创建清晰一致的阴影吗?你能不能改变背景色,因为它会破坏一些边缘的对比度?暗像素是一个问题,但所有暗像素都与手及其阴影相关。这可能会破坏基于直方图的二值化。考虑将通道强度小于20(或任何值)的每个像素重新映射到值高于阈值的最近颜色。考虑只使用一个或两个HSV通道,我现在不能做太多。但我肯定会发布更清晰的图像。我一定会试试你的建议。