Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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 OpenCV分割轮廓_Python_Opencv_Contour - Fatal编程技术网

Python OpenCV分割轮廓

Python OpenCV分割轮廓,python,opencv,contour,Python,Opencv,Contour,我正在尝试使用Python上的OpenCV检测手。 我正在处理这个阈值图像: 这就是等高线绘制状态: 我试图检测手,但轮廓太大,它捕捉到了我的整个身体。我需要这样的轮廓: 我的代码: import cv2 orImage = cv2.imread("f.png") image = cv2.cvtColor(orImage,cv2.COLOR_BGR2GRAY) image = cv2.blur(image,(15,15)) (_,img_th) = cv2.threshold(imag

我正在尝试使用Python上的OpenCV检测手。
我正在处理这个阈值图像:


这就是等高线绘制状态:


我试图检测手,但轮廓太大,它捕捉到了我的整个身体。
我需要这样的轮廓:



我的代码:

import cv2
orImage = cv2.imread("f.png")
image = cv2.cvtColor(orImage,cv2.COLOR_BGR2GRAY)
image = cv2.blur(image,(15,15))
(_,img_th) = cv2.threshold(image,96,255,1)
        (contours,_) = cv2.findContours(img_th, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
       if cv2.contourArea(c) > 15:
             x,y,w,h = cv2.boundingRect(c)
             cv2.rectangle(image,(x-20,y-20),(x+w+20,y+h+20),(0,255,0),2)
cv2.drawContours(image,contours,-1,(255,0,0),2)
cv2.imwrite("hi.jpg",image)



谢谢

我有一个解决方案(我从中得到了一些帮助),它还有许多专门为OpenCV用户提供的关于图像处理的精彩教程。)

我首先转换了您上传到HSV颜色空间的图像:

HSV = cv2.cvtColor(orimage, cv2.COLOR_BGR2HSV)
然后,我将图像转换为HSV颜色空间后,设置皮肤检测的近似范围:

l = np.array([0, 48, 80], dtype = "uint8")
u = np.array([20, 255, 255], dtype = "uint8")
然后,我将此范围应用于HSV图像:

skinDetect = cv2.inRange(HSV, l, u)
这是我得到的(我还调整了图像的大小,使其更小):

现在,您可以在该图像中找到最大的轮廓,然后进行形态学操作以完美地获得手


希望这有帮助。

要将手的轮廓与身体其他部位分开,您需要使用阈值算法。你有实际的输入图像吗?或者你可以检测实际图像中的边缘,然后与轮廓图像重叠。是的,我有;但我想我需要像“max area”这样的东西,只是提醒一下,我提到的博客文章还有很多其他很棒的教程!!我刚刚遇到另一个解决方案,涉及YCrCb颜色空间,可在