2011-10-16 23 views
5

Después de tomar una fotografía con un teléfono Android, quiero identificar un objeto en la imagen haciendo clic en él, por ejemplo. Posibles objetos en la mayoría de los casos: 1. Regla

2. Persona
3. Lápiz
estoy usando androide creado previamente-OpenCV versión 2.3.1 y traté de hacer clic en el objeto y rellenar regla que para marcarlo, pero si los contornos no están cerrados, la imagen completa se llenará.
a) También traté de hacer clic en el objeto de la regla e ir hacia el sur, norte, este, oeste para ver dónde están los bordes y recoger estas coordenadas, pero encontré problemas graves allí (no preguntes).detección de objetos android opencv

Preguntas:
1. ¿Es posible cerrar los contornos de alguna manera para simplemente llenar el objeto deseado?
2. Lo que REALMENTE quiero encontrar son las coordenadas de la parte inferior Y la altura de (por ejemplo) la regla.
CUALQUIER otra solución es apreciada. ¿Cómo te darías cuenta?

Actualización: Solucioné el problema con a) y uso este enfoque en este momento (no estoy contento). También probé el enfoque de Entreco, pero parece que ya no da la solución deseada.

Respuesta

6

No sé si lo intentó, pero generalmente puede obtener mejores resultados procesando primero la imagen.

1) Aplicar GuassianBlur para eliminar el ruido

2) Aplicar AdaptiveThreshold -> para convertir la imagen en el funcionamiento blanco y negro

3) Aplicar Dilate, para llenar las grietas

Al usar diferentes configuraciones para la operación AdaptiveThreshold y Dilate, es posible que pueda obtener contornos cerrados ...

Un ejemplo que utilicé es el siguiente:

// 1) Apply gaussian blur to remove noise 
Imgproc.GaussianBlur(mGraySubmat, mIntermediateMat, new Size(11,11), 0); 

// 2) AdaptiveThreshold -> classify as either black or white 
Imgproc.adaptiveThreshold(mIntermediateMat, mIntermediateMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 5, 2); 

// 3) Invert the image -> so most of the image is black 
Core.bitwise_not(mIntermediateMat, mIntermediateMat); 

// 4) Dilate -> fill the image using the MORPH_DILATE 
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(3,3), new Point(1,1)); 
Imgproc.dilate(mIntermediateMat, mIntermediateMat, kernel); 
+0

Muchas gracias por la respuesta @Entreco. Intentaré esto e informaré. – gartenabfall

+0

@Entreco podemos dibujar un rectángulo alrededor de los contornos cerrados –

+0

no se detecta el borde si el objeto rectángulo negro. –

Cuestiones relacionadas