2012-06-13 21 views
5

¿Hay alguna función de OpenCV como "cvHoughCircles()" que pueda usar para la programación de detección cuadrada para el programa de detección de círculo que es CvSeq * circles = cvHoughCircles() pero no pude encontrar para la detección de cuadrados.¿Hay alguna función opencv como "cvHoughCircles()" para la detección cuadrada?

+2

Teniendo en cuenta que la detección de plazas es sustancialmente más fácil que la detección de círculos, no me sorprendería que squarefinding se deja como ejercicio para el codificador. Básicamente, tiene que encontrar segmentos colineales conectados largos que se cortan aproximadamente en ángulos rectos, y puede generar esos segmentos utilizando un poco de filtrado y un detector de bordes. La mayoría de las herramientas que necesita para hacer eso ya deberían estar en OpenCV. – Rook

+0

Y para hacer eso, usará Hough transform para líneas, que también se implementa en OpenCV;) – CTZStef

+0

Consulte esto: http://stackoverflow.com/questions/10533233/opencv-c-obj-c-advanced-square- detección Hay tres o cuatro enfoques que puedes probar en ese enlace. Disfruta :) – ChathuraSam

Respuesta

8

usted no necesita ninguna función específica para esa. OpenCV viene con una muestra de detección cuadrada (que realmente detecta rectángulos, puede agregar la restricción de que todos los lados deben tener la misma longitud para obtener el cuadrado).

Comprobar este enlace: squares.cpp

Hay una buena explicación de cómo funciona el código en este SOF: How to identify square or rectangle with variable lengths and width by using javacv?

A continuación se muestra el resultado que se obtiene al aplicar ese código.

enter image description here

+0

bt cuando intento ejecutar el programa, que muestra 2 errores debido a ** # include "opencv2/core/core.hpp" ** y ** # incluye "opencv2/imgproc/imgproc.hpp" ** ///// Error- \t error fatal C1083: No se puede abrir el archivo include: 'opencv2/core/core.hpp': No existe ese archivo o directorio. ¿Podría decirme la manera de resolver este error? – Thar1988

+0

Lo siento No estoy usando C++. Puede formularse como una pregunta separada, diciendo que su nueva pregunta es la continuación de esta pregunta. –

+0

Debería cambiar esos incluye para que su ruta de acceso al lugar donde instaló esos archivos. Debe ser una ruta relativa, no una ruta completa. –

5

No hay función opencv para encontrar cuadrados directamente.

Pero puede usar la función houghLines, que detecta líneas, y encuentra intersecciones entre líneas con ángulos de 90 grados.

Para medir ángulos entre líneas que puedo proporcionar un fragmento de código Java:

// returns cosine of angle between line segments 0 to 1, and 0 to 2. 
// pt0 is the vertex/intersection 
// angle of 90 degrees will have a cosine == 0 

public static final double angleCosine(Point pt1, Point pt0, Point pt2) { 
    double dx1 = pt1.x - pt0.x; 
    double dy1 = pt1.y - pt0.y; 
    double dx2 = pt2.x - pt0.x; 
    double dy2 = pt2.y - pt0.y; 
    return (dx1 * dx2 + dy1 * dy2)/Math.sqrt((dx1 * dx1 + dy1 * dy1) * (dx2 * dx2 + dy2 * dy2) + 1e-10); 
} 

Docs sobre houghLines:

http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghlines#houghlines

Cuestiones relacionadas