2016-12-30 5 views
1

J'essaye de détecter la main avec OpenCV sur Python.
Je travaille sur cette image seuillée:
Thresholded image

Et c'est contour état drawed:
Contour drawed image

Je suis en train de détecter la main, mais le contour est trop grand, il saisit tout mon corps.
J'ai besoin comme ceci:
I need it like this


Contours de fractionnement OpenCV

Mon code:

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) 




Merci!

+0

Pour séparer le contour de la main du reste du corps, vous devez travailler sur l'algorithme de seuil. Avez-vous une image d'entrée réelle? –

+0

Ou peut-être que vous pouvez détecter les bords dans l'image réelle et ensuite le superposer avec l'image de contour. –

+0

Oui, oui; http://i.imgur.com/YOFXf9u.jpg mais je pense que j'ai besoin de quelque chose comme "zone max" –

Répondre

2

J'ai une solution (je suis arrivé un peu d'aide de HERE), il a beaucoup d'autres tutoriels merveilleux sur le traitement d'images exclusivement pour les utilisateurs OpenCV)

j'ai converti l'image que vous avez téléchargé l'espace HSV couleur:.

HSV = cv2.cvtColor(orimage, cv2.COLOR_BGR2HSV) 

Je puis définissez une plage approximative pour la détection de la peau une fois que l'image est convertie en espace HSV couleur:

l = np.array([0, 48, 80], dtype = "uint8") 
u = np.array([20, 255, 255], dtype = "uint8") 

Je me suis alors appliqué cette gamme à l'image HSV:

skinDetect = cv2.inRange(HSV, l, u) 

C'est ce que j'ai obtenu (je aussi redimensionné l'image pour la rendre plus petite):

enter image description here

Maintenant, vous pouvez trouver le plus grand contour dans cette image suivie d'opérations morphologiques pour obtenir la main parfaitement.

Espérons que cela aide.

+0

Juste un rappel, le blog que j'ai mentionné a beaucoup d'autres didacticiels géniaux aussi !! –

+0

Je suis juste tombé sur une autre solution impliquant YCrCb espace de couleur disponible sur [THIS LINK] (http://stackoverflow.com/questions/14752006/computer-vision-masking-a-human-hand/14756351#14756351) –

+0

Super idée! Cela a fonctionné, merci! :) –