OpenCV: detección de puntos / discos circulares de dominó

Estoy desarrollando una aplicación para Android que calcula la suma de todos los puntos de las piezas de dominó vistas en OpenCV para Android.

una muestra

El problema es que no puedo encontrar una manera de filtrar otros contornos y contando sólo puntos que veo en los dominós, he intentado utilizar Canny borde de encontrar a continuación, utilizar HoughCircles, pero sin resultado, ya que no tengo un top absoluto Vista de las rocas y HoughCircles detectar círculos perfectos sólo 🙂

Aquí está mi código:

public Mat onCameraFrame(Mat inputFrame) { inputFrame.copyTo(mRgba); Mat grey = new Mat(); // Make it greyscale Imgproc.cvtColor(mRgba, grey, Imgproc.COLOR_RGBA2GRAY); // init contours arraylist List<MatOfPoint> contours = new ArrayList<MatOfPoint>(200); //blur Imgproc.GaussianBlur(grey, grey, new Size(9,9), 10); Imgproc.threshold(grey, grey, 80, 150, Imgproc.THRESH_BINARY); // because findContours modifies the image I back it up Mat greyCopy = new Mat(); grey.copyTo(greyCopy); Imgproc.findContours(greyCopy, contours, new Mat(), Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_NONE); // Now I have my controus pefectly MatOfPoint2f mMOP2f1 = new MatOfPoint2f(); //a list for only selected contours List<MatOfPoint> SelectedContours = new ArrayList<MatOfPoint>(400); for(int i=0;i<contours.size();i++) { if(here I should put a condition that distinguishes my spots, eg: if contour inside is black and is a black disk) { SelectedContours.add(contours.get(i)); } } Imgproc.drawContours(mRgba, SelectedContours, -1, new Scalar(255,0,0,255), 1); return mRgba; } 

EDITAR:

Una característica única de mis contornos después del umbral es que son totalmente negros desde adentro, ¿de todas formas puedo calcular el color / intensidad medios para un contorno dado?

Hay un problema similar y una posible solución en SO, titulado Detección de monedas (y elipses en forma) en una imagen . Aquí encontrarás algunas recomendaciones sobre la función fitEllipse .

Usted debe echar un vistazo a esto para más información sobre la función de fitEllipse .

Además, para detectar sólo elementos negros en una imagen, puede utilizar el modelo de color HSV, para encontrar sólo colores negros. Usted puede encontrar una explicación aquí .

  • Detección de diferentes formas dinámicamente como (Círculo, cuadrado y Rectángulo) de la cámara?
  • Construcción de TBB con la muestra de OpeCV android
  • OpenCV para Android - inicializar Matrix
  • Correspondencia de plantillas en Android usando openCV
  • Transformación de perspectiva
  • Android Camera takePicture utiliza Previews small buffer
  • Eclipse da error al usar GaussianBlur con OpenCV para Android
  • ¿Cómo traducir código OpenCV-C ++, que contiene punteros, a JAVA?
  • Convertir Mat a Bitmap Opencv para Android
  • OpenCV para Android, ¿necesito instalar OpenCV Manager por separado?
  • La cámara no está abierta - Inicialización estática en OpenCV Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.