studio programacion para móviles libro galeria edición desarrollo curso camara aplicaciones android opencv bitmap mat

programacion - convertir Bitmap a Mat después de capturar la imagen con la cámara de Android



manual de programacion android pdf (4)

Mat b = new Mat(); Bitmap bmp = getIntent().getExtras().getParcelable("image_send"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_image); Mat tmp = new Mat (bmp.getWidth(), bmp.getHeight(), CvType.CV_8UC1); Utils.bitmapToMat(bmp, tmp); Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY); //Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2RGB, 4); Utils.matToBitmap(tmp, bmp); iv = (ImageView) findViewById(R.id.imageView1); iv.setImageBitmap(bmp); }

No se puede mostrar el bmp. Mi aplicación se ha detenido después de tomar una foto.


Con Camera2 esta tarea es muy rápida, solo necesita configurar ImageReader con ImageFormat en YUV_420_888 y luego YUV_420_888 marcos con OpenCV esta manera:

// You can read image with differents patterns for example grayscale: Mat mGray(height, width, cv::IMREAD_GRAYSCALE, pFrameData);

Una implementación completa en la siguiente respuesta: https://.com/a/49331546/471690


El mismo problema con mi aplicación. En la actividad principal, tuve que hacer OpenCV utilizable. (Supongo que su aplicación generó un error de enlace cuando se utilizó la biblioteca Mat). Todas las aplicaciones de muestra hacen esto. Incluye esta tu actividad principal.

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { Log.i("OpenCVManager setup", "OpenCV loaded successfully"); //Use openCV libraries after this } break; default: { super.onManagerConnected(status); } break; } } }; @Override public void onResume() { super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback); }


Utils.bitmapToMap requiere un mapa de bits de tipo ARGB_8888 o RGB_565 .

import org.opencv.android.Utils; Mat mat = new Mat(); Bitmap bmp32 = bmp.copy(Bitmap.Config.ARGB_8888, true); Utils.bitmapToMat(bmp32, mat);


Mat tmp = new Mat (bmp.getWidth(), bmp.getHeight(), CvType.CV_8UC1);

OpenCV Mat constructor espera filas, pares de pares en lugar de ancho, altura como sus argumentos, inviértalos.

Tratar:

Mat tmp = new Mat (bmp.getHeight(), bmp.getWidth(), CvType.CV_8UC1);