Tengo el código de un objeto detector (en este caso, una pelota) el uso de OpenCV. El problema es que cada uno de búsqueda en google me devuelve algo con DETECCIÓN de la CARA en ella. Así que necesito ayuda sobre dónde empezar, qué uso, etc..

Algo de información:

  • La pelota no tiene un color fijo, probablemente será blanco, pero esto podría cambiar.
  • Tengo que usar la máquina de aprendizaje, no tiene que ser un complejo y confiable, la sugerencia es KNN (que es la FORMA más simple y más fácil).
  • Después de mi búsqueda, me encontré con que calcular el histograma de las muestras de bola-sólo las imágenes y la enseñanza a la ML puede ser útil, pero mi principal preocupación aquí es que el tamaño de la pelota puede y va a cambiar (más cerca y más lejos de la cámara) y no tengo idea de en qué pasar el ML para clasificar para mí, quiero decir.. yo no puedo (o puedo?) sólo se prueba cada píxel de la imagen para cada tamaño posible (a partir de, digamos, 5×5 para WxH) y la esperanza de encontrar un resultado positivo.
  • Allí puede que no sea un fondo uniforme, como las personas, de tela detrás de la pelota y etc..
  • Como ya he dicho, tengo que usar un ML algoritmo, que significa que no hay Haar o Viola los algoritmos.
  • También, pensé en el uso de contornos para encontrar círculos en un Astuto ed imagen, sólo tienes que encontrar una manera de transformar un contorno en una fila de datos para enseñar el KNN.

    Así que… sugerencias?

    Gracias de antemano.
    😉

  • ¿Has pensado en pintar las caras en la bola? 🙂
InformationsquelleAutor hfingler | 2011-06-20

1 Comentario

  1. 36

    Bueno, básicamente lo que necesita para detectar círculos. Has visto cvHoughCircles()? Se puede usar?

    Esta página tiene buena información sobre cómo la detección de cosas con OpenCV. Usted puede estar más interesado en la sección 2.5.

    Este es un pequeño demo sólo escribí para detectar monedas en esta imagen. Esperemos que se puede utilizar alguna parte del código para su ventaja.

    De entrada:
    Simple de detección de objetos usando OpenCV y aprendizaje de máquina

    Salidas:
    Simple de detección de objetos usando OpenCV y aprendizaje de máquina

    //compiled with: g++ circles.cpp -o circles `pkg-config --cflags --libs opencv`
    #include <stdio.h>
    #include <cv.h>
    #include <highgui.h>
    #include <math.h>
    int main(int argc, char** argv)
    {
    IplImage* img = NULL;
    if ((img = cvLoadImage(argv[1]))== 0)
    {
    printf("cvLoadImage failed\n");
    }
    IplImage* gray = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
    CvMemStorage* storage = cvCreateMemStorage(0);
    cvCvtColor(img, gray, CV_BGR2GRAY);
    //This is done so as to prevent a lot of false circles from being detected
    cvSmooth(gray, gray, CV_GAUSSIAN, 7, 7);
    IplImage* canny = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
    IplImage* rgbcanny = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
    cvCanny(gray, canny, 50, 100, 3);
    CvSeq* circles = cvHoughCircles(gray, storage, CV_HOUGH_GRADIENT, 1, gray->height/3, 250, 100);
    cvCvtColor(canny, rgbcanny, CV_GRAY2BGR);
    for (size_t i = 0; i < circles->total; i++)
    {
    //round the floats to an int
    float* p = (float*)cvGetSeqElem(circles, i);
    cv::Point center(cvRound(p[0]), cvRound(p[1]));
    int radius = cvRound(p[2]);
    //draw the circle center
    cvCircle(rgbcanny, center, 3, CV_RGB(0,255,0), -1, 8, 0 );
    //draw the circle outline
    cvCircle(rgbcanny, center, radius+1, CV_RGB(0,0,255), 2, 8, 0 );
    printf("x: %d y: %d r: %d\n",center.x,center.y, radius);
    }
    cvNamedWindow("circles", 1);
    cvShowImage("circles", rgbcanny);
    cvSaveImage("out.png", rgbcanny);
    cvWaitKey(0);
    return 0;
    }

    La detección de los círculos y dependen mucho de los parámetros de cvHoughCircles(). Tenga en cuenta que en esta demo, he utilizado Canny bien.

    • Voy a ver si lo puedo usar… si es un sí, podría obtener los histogramas de círculo-solo imágenes, luego cuando quiero encontrar círculos en una imagen, gire a gris, utilice esta función para obtener un cuadro de límite y clasificar con el KNN (bastante estúpido, ¿verdad?). Gracias por cierto.
    • Respuesta actualizada.
    • Wow eres rápido :P, probablemente voy a terminar haciendo lo que he dicho en el anterior comentario porque él REALMENTE quiere ML. Y ya que estoy en amor con python, código corto entrante! Voy a publicar el código final aquí, para ayudar a quien lo necesite algo como esto. Muchas gracias por ese ejemplo de código, solo tienes que aprender los parámetros de ahora.
    • el CVHoughCircles función ya incluye un filtro de canny. no se menciona en la documentación, pero el libro de cocina menciona este «entre líneas»…
    • Soy tal vez mal, pero parece que la llamada a la astuto función es inútil, ya que el cvHoughCircles se llama a la función con el «gris» IplImage y no el «astuto» IplImage…
    • Sus enlaces están muertos o simplemente tener problemas ahora, FYI.
    • Gracias por decírmelo, pero no hay nada que yo pueda hacer al respecto ya que esas páginas no son míos. Esperemos que lleguen de nuevo.
    • El vínculo roto a la página wiki puede ser encontrado a través de la wayback machine: web.archive.org/web/20130504190215/http://cgi.cse.unsw.edu.au/… En caso de que un nuevo vínculo que no se mantiene bien, he copiado y cambiado el formato de la sección correspondiente de la página wiki en: stackoverflow.com/a/21472252/320111

Dejar respuesta

Please enter your comment!
Please enter your name here