OpenCV拆分轮廓

时间:2016-12-30 20:10:57

标签: python opencv contour

我试图在Python上使用OpenCV检测手 我正在研究这个阈值图像:
Thresholded image

那个轮廓绘制状态:
Contour drawed image

我试图检测手,但轮廓太大,它捕捉到我的整个身体。
我需要它像这样:
I need it like this


我的代码:

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)




谢谢!

1 个答案:

答案 0 :(得分:2)

我有一个解决方案(我从HERE获得了一些帮助),它还有许多关于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)

这是我获得的(我还调整了图像大小以使其更小):

enter image description here

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

希望这有帮助。