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.
- Girar la vista previa de la cámara a la cámara Android OpenCV
- Objeto perfecto para ser reconocido con OpenCV
- Clasificación de imágenes OpenCV Android
- Conversión de OpenCV C ++ a Java para problemas de detección de formas
- Reconocimiento Óptico de Caracteres Android con OpenCV
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?
- OpenCV 2.4.1: UnsatisfiedLinkError
- OpenCv en Android: detección de puntos clave en imágenes de archivo
- Reconocimiento de imágenes - Descriptor binario representación en Mat - OpenCV Android
- Construyendo OpenCV 2.4.5 en android ADT: "ndk-build" no se encuentra en PATH
- Código de desbloqueo de la cara en el proyecto de código abierto de Android?
- Cómo integrar OpenCV Manager en la aplicación para Android
- Usando OpenCV para analizar datos de geles de proteínas
- Android Studio enlaza las bibliotecas estáticas de OpenCV
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í .
- Protocolo sugerido para la comunicación android-arduino
- Puedo escalar el emulador de genymotion a "tamaño real del dispositivo"?