Android: OpenCV: imwrite devuelve siempre false y falla al escribir
Este código funcionaba pero en Android 4.2 y OpenCV 2.4.4 falla, pero no sé por qué. ¿Puede alguien arrojar alguna luz sobre él para mí?
Gracias por cualquier ayuda.
- Convertir Mat a Bitmap Opencv para Android
- Cómo procesar una imagen con OpenCV onPictureTaken?
- Comparar imágenes SIFT / SURF detalles en archivos .yml OpenCV?
- Números digitales en Tesseract OCR
- Ejecutar código nativo en segundo plano
Baz
public void SaveImage (Mat mat) { Mat mIntermediateMat = new Mat(); Imgproc.cvtColor(mRgba, mIntermediateMat, Imgproc.COLOR_RGBA2BGR, 3); File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); String filename = "barry.png"; File file = new File(path, filename); Boolean bool = null; filename = file.toString(); bool = Highgui.imwrite(filename, mIntermediateMat); if (bool == true) Log.d(TAG, "SUCCESS writing image to external storage"); else Log.d(TAG, "Fail writing image to external storage"); }
Bool vuelve falso cada vez. La ruta / nombre del archivo es como debe ser ("storage / emulated / 0 / Pictures / barry.png") para el usuario # 0 y el directorio Pictures está allí.
¿Qué puede hacer que imwrite devuelva false?
Podría convertir la estera a un bmp y guardarlo yo mismo (lo que hago en otra parte en una aplicación no OpenCV), pero ya que Highgui.imwrite está ahí, y este código solía funcionar cuando estaba escribiendo a 2.4.0 y probando en Android 3.x, me gustaría usarlo si puedo.
Muchas gracias
Baz
- Rotación de imagen con opencv en android corta los bordes de una imagen
- ¿Cómo empaquetar y vincular OpenCV binares y OpenCV Java SDK para Android Studio?
- Visión por ordenador - filtración de cascos convexos y defectos de convexidad con OpenCV
- Error de aserción (scn == 3 || scn == 4) en void cv :: cvtColor (cv :: InputArray Android
- Android4OpenCV: configuración de la resolución al inicio
- Imagen de limpieza para ayudar a tesseract en Android
- Android - utiliza la cámara sin vista de superficie o textureview
- Usando OpenCV para analizar datos de geles de proteínas
No lo puedo creer. [Facepalm].
Añadir esto a su archivo de manifiesto Barry:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
¿Vendría alguien y me daría una bofetada por favor? Me las arreglé para eliminar el permiso de escritura del manifiesto así que realmente no debería haber ninguna sorpresa que no escribiría …
Doh.
Barry
En realidad hay dos posibles problemas:
-
Permisos de Android. Para solucionar este problema, añada el permiso al manifiesto
"Android.permission.WRITE_EXTERNAL_STORAGE"
-
Está intentando guardar el archivo en la tarjeta SD y su dispositivo está conectado a la PC en el modo "Unidad de disco". Significa que comparte los derechos de acceso con la PC. Conecte su dispositivo en el modo "Carga solamente". Para comprobar el modo de conexión utilice
Environment.getExternalStorageState()
, se devolverá compartido para "Disk mode" y se montará en "Charge only".He modificado tu código y ahora parece
public void SaveImage (Mat mat) { Mat mIntermediateMat = new Mat(); Imgproc.cvtColor(mRgba, mIntermediateMat, Imgproc.COLOR_RGBA2BGR, 3); File path = new File(Environment.getExternalStorageDirectory() + "/Images/"); path.mkdirs(); File file = new File(path, "image.png"); filename = file.toString(); Boolean bool = Highgui.imwrite(filename, mIntermediateMat); if (bool) Log.i(TAG, "SUCCESS writing image to external storage"); else Log.i(TAG, "Fail writing image to external storage"); }
Tenga cuidado con las versiones +4.4 (KitKat) porque android.permission.WRITE_EXTERNAL_STORAGE
no permite escribir en la tarjeta SD externa:
El permiso WRITE_EXTERNAL_STORAGE sólo debe conceder acceso de escritura al almacenamiento externo primario en un dispositivo. No se debe permitir que las aplicaciones escriban en dispositivos de almacenamiento externos secundarios, excepto en sus directorios específicos de paquetes según lo permitan los permisos sintetizados. Restringir escrituras de esta manera asegura que el sistema puede limpiar archivos cuando las aplicaciones se desinstalan.
Eche un vistazo a: Escritura en tarjeta SD siempre fallando
- Android L conflicto de permisos entre release y debug apks
- Android RatingBar mostrando más de 5 estrellas