Reputation: 31
I am using Opencv in android and I want to load an image from gallery to Mat , please check my code and help in what I did wrong?
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult( requestCode, resultCode, data );
if (requestCode == GALLERY_INTENT && resultCode == RESULT_OK) {
Uri imageUri = data.getData();
String selectedImagePath = getPath(imageUri);
Mat imgRgba = Imgcodecs.imread( selectedImagePath );
Mat img = new Mat();
imgRgba.copyTo(img);
}
private String getPath(Uri imageUri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query( imageUri, projection, null, null, null );
if(cursor!=null){
int column_index = cursor.getColumnIndexOrThrow( MediaStore.Images.Media.DATA );
cursor.moveToFirst();
return cursor.getString( column_index );
}
return imageUri.getPath();
}
When I run it it crashes with :
java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.imgcodecs.Imgcodecs.imread_1(java.lang.String) (tried Java_org_opencv_imgcodecs_Imgcodecs_imread_11 and Java_org_opencv_imgcodecs_Imgcodecs_imread_11__Ljava_lang_String_2)
at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method)
at org.opencv.imgcodecs.Imgcodecs.imread(Imgcodecs.java:118)
Upvotes: 3
Views: 743
Reputation: 304
You hava to initialize OpenCV library before using on Android.
Call below code before use OpenCV
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_11, this, baseLoaderCallback);
And then, below method will be callback.
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
Upvotes: 3