Cuenca en Opencv Android

Estaba tratando de implementar la función de cuenca de OpenCV en Android. Sin embargo mi programa siempre se estrelló en el lugar donde se llama la función de cuenca. Puedo imprimir el resultado del marcador perfectamente bien. Pero la función de la cuenca siempre se bloquea. Aquí está mi código:

Mat threeChannel = new Mat(); Imgproc.cvtColor(mRgba, threeChannel, Imgproc.COLOR_BGR2GRAY); Imgproc.threshold(threeChannel, threeChannel, 100, 255, Imgproc.THRESH_BINARY); Mat fg = new Mat(mRgba.size(),CvType.CV_8U); Imgproc.erode(threeChannel,fg,new Mat(),new Point(-1,-1),2); Mat bg = new Mat(mRgba.size(),CvType.CV_8U); Imgproc.dilate(threeChannel,bg,new Mat(),new Point(-1,-1),3); Imgproc.threshold(bg,bg,1, 128,Imgproc.THRESH_BINARY_INV); Mat markers = new Mat(mRgba.size(),CvType.CV_8U, new Scalar(0)); Core.add(fg, bg, markers); WatershedSegmenter segmenter = new WatershedSegmenter(); segmenter.setMarkers(markers); Mat result = segmenter.process(mRgba); return result; 

WatershedSegmenter calss es el siguiente:

 public class WatershedSegmenter{ public Mat markers; public void setMarkers(Mat markerImage) { markerImage.convertTo(markers, CvType.CV_32S); } public Mat process(Mat image) { Imgproc.watershed(image, markers); markers.convertTo(markers,CvType.CV_8U); return markers; } } 

¿Alguien ha conseguido que esto funcione en Android antes? Me las arreglé para que funcione en C ++ con Qt antes de seguir este tutorial: link . Sin embargo, no tengo suerte en Android en este momento.

Ahora descubrí la razón del accidente. la cuenca está tomando un formato de 8 bits de 3 canales de datos, y RGBA es un dato de 4 canales. Acabo de convertirlo de RGBA a RGB, y se resolvió todos los problemas.

Su Mat no coincide con el .depth () correcto y / o .channel (). El primer paso es comprobar que cada Mat tiene el tipo que crees que hace usando las funciones myMat.depth () y myMat.channels (). La función cuenca utiliza dos argumentos de Mat. La primera debería ser una imagen de 8 bits y 3 canales, y la segunda debería ser una imagen de un solo canal de 32 bits.

Si no son el tipo adecuado de imagen, utilice cvtColor para convertir de lo que tiene a lo que necesita.

  • Error: 'to_string' no es un miembro de 'std'
  • Android Camera takePicture utiliza Previews small buffer
  • Cómo detectar la pupila del ojo circularmente en opencv
  • Obteniendo una imagen mediana de la secuencia de imágenes con OpenCV
  • OpenCV - Java: función inRange
  • C ++ OpenCV imread no funciona en Android
  • Android - alternativa para OpenCV?
  • OpenCV FeatureDetector
  • Números digitales en Tesseract OCR
  • ¿Cómo puedo acelerar mi aplicación Android-openCV?
  • OpenCV Android: ¿Cómo dibujar puntos clave coincidentes con las imágenes comparadas?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.