2012-02-06 31 views
8

Estoy usando la biblioteca OpenCV para un proyecto de procesamiento de imágenes para detectar manos. Inicialicé la imagen en iplimage, la coloreé y luego la convertí a HSV con cvCvtColor(imageHand,imageHand,CV_BGR2HSV); No conozco el algoritmo eficiente, así que ese es mi problema. Consulte mi código:Detección de manos usando OpenCV

for(int row = 0; row < imageHand->height; row++) 
{ 
    for (int col = 0; col < imageHand->width; col++) 
    { 
     h =(imageHand->imageData[imageHand->widthStep * row + col * 3]) ; 
    s = (imageHand->imageData[imageHand->widthStep * row + col * 3 + 1]); 
    v = (imageHand->imageData[imageHand->widthStep * row + col * 3 + 2]); 

     if( h>85) 
     { 
    imageHand->imageData[imageHand->widthStep * row + col * 3 ]  = 0 ; 
    imageHand->imageData[imageHand->widthStep * row + col * 3 + 1 ] =0 ; 
    imageHand->imageData[imageHand->widthStep * row + col * 3 + 2 ] = 0 ; 
     } 
     else 
     { 
     imageHand->imageData[imageHand->widthStep * row + col * 3 ]  = 255 ; 
    imageHand->imageData[imageHand->widthStep * row + col * 3 + 1 ] = 255 ; 
     imageHand->imageData[imageHand->widthStep * row + col * 3 + 2 ] = 255 ; 

     } 


    } 
} 

Creo que el rango de la h buscado es > 85!? Si conoces un mejor algoritmo que por favor guíame.

+0

Limpié la ortografía y la gramática; compruebe que la información siga siendo correcta. – Pubby

+1

¿Podría especificar para qué necesita detección de mano? ¿Debería ser en tiempo real o podría ser hecho fuera de línea? ¿Necesita esto trabajando en una gran variedad de condiciones de luz? ¿O tal vez solo estás jugando? –

+0

Necesito un código de detección manual para portarlo a FPGA, así que debe ser en tiempo real y de alta eficiencia y quiero que funcione para las condiciones más probables –

Respuesta

6

Si echa un vistazo a este sitio, Hand detection using opencv, encontrará un algorithm similar al que está utilizando. Diría que la forma más fácil de detectar una mano sería mediante el uso del color (es decir, detección de la piel). Definitivamente recomendaría mirar primero el algoritmo proporcionado por ese sitio. Hay otra parte que también se usa para el reconocimiento de gestos, si ese es un problema eventual que vas a tener que manejar.

Otras posibilidades incluyen:

  • sustracción de fondo
    • Esto es muy simple y propensos a romperse, especialmente si usted está planeando sobre el cambio de fondo. Pero, si espera usarlo frente a, por ejemplo, una pared blanca ... esta podría ser una manera fácil de hacerlo.
  • análisis de forma de
    • ha habido un cierto éxito con detecting fingertips utilizando la transformada de Hough generalizada. Los falsos positivos pueden convertirse en una preocupación, sin embargo, la eficiencia es una preocupación, especialmente en situaciones con una gran cantidad de antecedentes.
+0

Estoy trabajando en un problema similar. Estoy usando color Pero lo encontré un poco lento y propenso al fracaso. Los enlaces que proporcionaste están muertos. ¿Tiene su nuevo enlace por casualidad? Sería interesante ver cómo otros lo han hecho. – CB4

2

como Ancallan ha mencionado anteriormente hand detection using opencv, me gustaría añadir algo más de información sobre el tema de la detección de gestos. En esa publicación, el autor utilizó un método de segmentación del color de la piel, que obtuvo resultados bastante buenos en circunstancias específicas.

se ha actualizado una nueva publicación de detección de gestos con el uso de openCV, en la que el autor utilizó a HAAR classifier to detect closed palm, y los resultados son mucho más sólidos que los anteriores. pero es necesario señalar que los objetos de detección están de alguna manera limitados, ya que un clasificador solo funciona para un gesto.

Cuestiones relacionadas