Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
Python 如何从这些图像中提取手部特征?_Python_Opencv - Fatal编程技术网

Python 如何从这些图像中提取手部特征?

Python 如何从这些图像中提取手部特征?,python,opencv,Python,Opencv,我有两种不同类型的图片(由于声誉原因,我无法发布,因此我将它们链接起来): 我试图使用OpenCV和Python从图像中提取手部特征。哪一种看起来像这样: import cv2 image = cv2.imread('image.jpg') blur = cv2.GaussianBlur(image, (5,5), 0) gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY) retval, thresh1 = cv2.threshold(gray, 70,

我有两种不同类型的图片(由于声誉原因,我无法发布,因此我将它们链接起来):

我试图使用OpenCV和Python从图像中提取手部特征。哪一种看起来像这样:

import cv2
image = cv2.imread('image.jpg')
blur = cv2.GaussianBlur(image, (5,5), 0)
gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)
retval, thresh1 = cv2.threshold(gray, 70, 255, / cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
cv2.imshow('image', thresh1)
cv2.waitKey(0)
其结果如下所示:

import cv2
image = cv2.imread('image.jpg')
blur = cv2.GaussianBlur(image, (5,5), 0)
gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)
retval, thresh1 = cv2.threshold(gray, 70, 255, / cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
cv2.imshow('image', thresh1)
cv2.waitKey(0)

第二幅图像中背景的变化干扰了
cv2.threshold()
函数,它没有正确地处理皮肤部位。有没有办法做到这一点


作为后续问题,提取手部特征的最佳方法是什么?我试过HaaR级联,但没有真正得到结果?我应该自己训练吗?我还有什么其他选择?

根据两幅图像的样本大小很难说,但我会尝试OpenCV(ChnFtrs),它类似于增压的Haar功能,可以从颜色以及您想要创建和提供的任何其他图像通道中获取线索

  • 在任何情况下,您都必须训练自己的级联。当然,正面和侧面拍摄采用单独的级联
  • 去掉你的皮肤颜色阈值,因为正如你已经注意到的,它可能会丢弃一些或所有的手,这取决于实际对象的皮肤颜色和灯光。ChnFtrs将比固定阈值更可靠地为您进行皮肤检测。(不过为了将来的参考,所有人实际上都是:))
  • 您可以通过仅在您期望的手所在的边界框内进行检测来消除一些误报
  • 尝试RGB和YUV频道,看看哪种效果最好。你也可以加入边缘检测的结果(比如说,精明,在你的3个颜色通道中最大化),以便更好地测量。最后,如有必要,您可以剔除未充分利用的通道以节省处理
  • 如果你的手部姿势变化很大,你可能需要对相似的姿势进行分组,并为每组训练一个单独的ChnFtrs级联。单个级联没有分支结构,因此当正样本在参数空间中不相交时,它们不能很好地处理。这是一片未经勘探的区域
经过正确训练的ChnFtrs级联(或多个)可能会为手提供一个边界框,这将有助于提取手部轮廓,但不能排除同一边界框内的无效轮廓。大多数其他对象检测例程也会有这个问题


另一种可能比ChnFtrs更好/更简单的选择是LINEMOD(我目前最喜欢的一种)。它的优点是不需要复杂的训练过程,也不需要任何训练时间。

你所说的手部特征到底是什么意思?是否仅从图像中提取手?这就是你的意思吗?同样有用的是:这两幅图像对你的预期输入有多大的代表性?所有人坐在同一个姿势吗?他们是在受控灯光下拍摄的(即,所有人都在同一工作室拍摄)?关于系统中的约束还有其他有用的信息吗?@devahishprasad是的,我想提取手的轮廓。@Chungzuwalla人的衣服会改变,但灯光和姿势是一样的。