Android OpenCV: dibujo de partidos con feature2d

No puedo conseguir que esta función funcione. Básicamente estoy haciendo la detección de características y la correspondencia con una imagen de referencia. Quiero superponer las características emparejadas encima de mi imagen de entrada. Aquí está mi código:

public Mat startProcessing(Mat inputImage) { Imgproc.cvtColor(inputImage, rgb, Imgproc.COLOR_GRAY2RGB); myFeatures.detect(rgb, keypoints); descriptorExtractor.compute(inputImage, keypoints, imageDescriptors); descriptorMatcher.match(templateDescriptors, imageDescriptors, matches); Features2d.drawMatches(rgb, keypoints, templateImage, templateKeypoints, matches, rgb); Imgproc.cvtColor(rgb, outputImage, Imgproc.COLOR_RGB2RGBA); return outputImage; } 

Es Features2d.drawMatches que es específicamente el problema. Según el error de Android que he conseguido, algunas dimensiones no están alineando. A decir verdad, ni siquiera estoy seguro de cómo drawMatches se supone que funciona en Android, porque no hay documentación en cualquier lugar.

Lo que quiero ser capaz de hacer es dibujar los partidos en la parte superior de la inputImage. He conseguido Feature2d.drawKeypoints para trabajar, pero no estoy seguro de cómo haría para convertir MatOfDMatch matches a un objeto MatOfKeypoint . Además, ni siquiera estoy seguro de si así es como funciona el MatOfDMatch – ¿no tiene alguna asociatividad dentro de él correspondiente a los descriptores?

Lo siento por estar en todo el lugar, estoy teniendo un tiempo muy difícil usar OpenCV con Android. La documentación de C ++ por ahí es buena, pero hay poco en el camino de los materiales de Android. ¡Gracias por cualquier ayuda!

La primera cosa que he notado es que usted está convirtiendo imágenes de un espacio de color a otro. Es un poco confuso. Si desea dibujar coincidencias en imágenes en escala de grises, no es necesario realizar esta conversión de imagen. Otra cosa, usted está detectando puntos clave en la imagen RGB y luego extraer los descriptores de la imagen original (como puedo ver es en escala de grises)

También le sugiero que compruebe dentro de su función si las imágenes son del mismo tipo. Simplemente imprima en el objeto inputImage registro y vea si ambos son de tipo CV_8UC3 o equivalente. Básicamente su código debe ser como esto:

 Mat imageOut = inputImage.clone(); Features2d.drawMatches(inputImage, keypoints, templateImage, templateKeypoints, matches, imageOut); Highgui.imwrite("result_match.jpeg", imageOut); 

Respondiendo a otras preguntas:

P: No estoy seguro de cómo haría para convertir MatOfDMatch coincidencias de MatOfDMatch en un objeto MatOfKeypoint . R: No es necesario hacerlo, porque la función MatOfKeypoint recibe MatOfKeypoint de imagen de entrada y también de imagen de plantilla. Luego, al pasar MatOfDMatch , dibuja coincidencias entre los kypoints recibidos coincidentes.

P: Además, ni siquiera estoy seguro si es así como funciona el MatOfDMatch – ¿no tiene alguna asociatividad dentro de él que corresponde a los descriptores? R: Sí lo ha hecho. Si va a hacer matches.toList(0).queryIdx y matches.toList(0).trainIdx obtendrá el índice del punto inputImage de inputImage , que coincide con el punto clave de templateImage del primer partido.

  • Error: el paquete android.hardware.camera2 no existe OpenCV
  • Android Estática Inicialización opencv 3.0 No se puede cargar la biblioteca "opencv_java3"
  • Cómo hacer tostadas de otro hilo (sans runOnUiThread)
  • ¿Debo usar JavaCV o la biblioteca Java de OpenCV en Android?
  • Cómo cambiar el tamaño de una imagen a la imagen de alta resolución sin perder píxeles?
  • Uso de funciones nativas en Android con OpenCV
  • Android - openCV, obtener parte de la imagen - comportamiento extraño
  • Construyendo OpenCV 2.4.5 en android ADT: "ndk-build" no se encuentra en PATH
  • OpenCV Android: Obtener fotogramas de la cámara en segundo plano sin mostrar en la pantalla
  • Prueba NEON-optimizado cv :: threshold () en el dispositivo móvil
  • Android4OpenCV: configuración de la resolución al inicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.