una rectangulos reconocimiento raspberry objetos imagen figuras detector deteccion con camara image-processing opencv object-detection

image-processing - rectangulos - reconocimiento de objetos opencv



Detección de objetos OpenCV-Punto central (4)

Espero que esto ayude, utiliza el método de momento 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; }

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

Estoy tratando de ubicar los puntos de esquina / centro de un objeto (rectángulo). La forma en que lo estoy haciendo actualmente es mediante la fuerza bruta (escaneando la imagen para el objeto) y no es precisa. Me pregunto si hay una funcionalidad debajo del capó que no conozco.

Editar detalles : el tamaño es aproximadamente el mismo que una pequeña lata de refresco. La cámara se coloca encima del objeto, para darle una sensación 2D / Rectangular. 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 en él (negro). La calidad de la toma es más o menos lo que esperaría ver desde una cámara web Logitech.

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

Está refinando simplemente ''cómo'' obtengo esas 4 esquinas en las que estoy tratando de enfocarme. Puedes ver mi método de fuerza bruta con esta imagen: Image


OpenCV tiene montones de funciones que pueden ayudarte a lograr esto. Descarga Emgu.CV para obtener un C # .NET envuelto en la biblioteca si estás programando en ese idioma.

Algunos métodos para obtener lo que quieres:

  1. Encuentre las esquinas como antes, por ejemplo, la función OpenCV "CornerHarris"

  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 utilizaría. Incluso puede realizar el umbral en la rutina COG. es decir, cog_x + = * imagePtr <128? 255: 0;

  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) La biblioteca AForge.NET tiene funciones de detección de esquina, 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 hacerlo, suponiendo que esté usando Windows y .NET.


Por lo general, se denomina análisis de blobs en otras bibliotecas de visión artificial. No he usado opencv todavía.


Ya hay un ejemplo de cómo hacer detección de rectángulo 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.