Detección de Objetos OpenCV-Punto Central


Dado un objeto sobre un fondo blanco liso, ¿alguien sabe si OpenCV proporciona funcionalidad para detectar fácilmente un objeto desde un fotograma capturado?

Estoy tratando de localizar los puntos de esquina/centro de un objeto (rectángulo). La forma en que lo estoy haciendo actualmente, es por fuerza bruta (escaneando la imagen en busca del objeto) y no es precisa. Me pregunto si hay funcionalidad bajo el capó de la que no soy consciente.

Editar Detalles: El tamaño aproximadamente el mismo que una soda pequeña puede. La cámara se coloca encima del objeto, para darle una sensación 2D/Rectángulo. La orientación / ángulo desde la cámara es aleatoria, que se calcula a partir de los puntos de esquina.

Es solo un fondo blanco, con el objeto sobre él (negro). La calidad de la toma es lo que esperarías ver de una cámara web de Logitech.

Una vez que obtengo los puntos de esquina, calculo el centro. El punto central se convierte entonces en centímetros.

Está refinando solo 'cómo' me pongo esas 4 esquinas es en lo que estoy tratando de centrarme. Puedes ver mi método de fuerza bruta con esta imagen: Image

Author: Adaline Valentina Simonian, 2008-11-11

4 answers

Ya hay un ejemplo de cómo hacer la detección de rectángulos en OpenCV (mira en samples/squares.c), y es bastante simple, en realidad.

Aquí está el algoritmo aproximado que usan:

0. rectangles <- {}
1. image <- load image
2. for every channel:
2.1  image_canny <- apply canny edge detector to this channel
2.2  for threshold in bunch_of_increasing_thresholds:
2.2.1   image_thresholds[threshold] <- apply threshold to this channel
2.3  for each contour found in {image_canny} U image_thresholds:
2.3.1   Approximate contour with polygons
2.3.2   if the approximation has four corners and the angles are close to 90 degrees.
2.3.2.1    rectangles <- rectangles U {contour}

No es una transliteración exacta de lo que están haciendo, pero debería ayudarte.

 26
Author: Ismael C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-26 18:30:23

Hope this helps, utiliza el método moment para obtener el centroide de una imagen en blanco y negro.

cv::Point getCentroid(cv::Mat img)
{
    cv::Point Coord;
    cv::Moments mm = cv::moments(img,false);
    double moment10 = mm.m10;
    double moment01 = mm.m01;
    double moment00 = mm.m00;
    Coord.x = int(moment10 / moment00);
    Coord.y = int(moment01 / moment00);
    return Coord;
}
 7
Author: Rod Dockter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-26 19:25:17

OpenCV tiene un montón de funciones que pueden ayudarle a lograr esto. Descargar Emgu.CV para un C#.NET empaquetado en la biblioteca si está programando en ese lenguaje.

Algunos métodos para conseguir lo que quieres:

  1. Encuentra las esquinas como antes - por ejemplo "CornerHarris" OpenCV function

  2. Umbral de la imagen y calcular el centro de gravedad - ver http://www.roborealm.com/help/Center%20of%20Gravity.php ... este es el método que usaría. Puedes incluso realice el umbral en la rutina de engranaje. es decir, cog_x + = * imagePtr

  3. Encuentre los momentos de la imagen para dar rotación, centro de gravedad, etc., por ejemplo, la función OpenCV "Momentos". (No he usado esto)

  4. (editar) El AForge.NET la biblioteca tiene funciones de detección de esquinas, así como un proyecto de ejemplo (MotionDetector) y bibliotecas para conectarse a cámaras web. Creo que esta sería la forma más fácil de ir, suponiendo que está utilizando Windows y . NET.

 4
Author: geometrikal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 00:49:44

Generalmente se llama análisis de blob en otras bibliotecas de visión artificial. Aún no he usado opencv.

 0
Author: kenny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-10 22:56:51