1

I'm trying to load and display an image in Android Studio using OpenCV but it's crash. I don't find where is the problem... Appreciate any helps! Thanks!

public class MainActivity2 extends Activity {

private static final String TAG = "Kate : ";
BaseLoaderCallback mOpenCVCallBack;
Mat mRgba;
ImageView imge1;
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_activity2);
}


private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS: {
                Log.i(TAG, "OpenCV loaded successfully");
                mRgba=new Mat();
                load_AND_display();
            }
            break;
            default: {
                super.onManagerConnected(status);
            }
            break;
        }
    }
};

public void load_AND_display() {

    //getting ImageView
    imge1= (ImageView) findViewById(R.id.img1);

    try {
        //Loading Image to Mat object
        mRgba= Utils.loadResource(this,R.drawable.mako,Highgui.CV_LOAD_IMAGE_COLOR);
    } catch (IOException e) {
        e.printStackTrace();
    }
    // create a bitmap:
    Bitmap bm = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(),Bitmap.Config.ARGB_8888);
    // convert Mat image to bitmap::
    Utils.matToBitmap(mRgba, bm);
    //setting the image
    imge1.setImageBitmap(bm);
}

@Override
public void onResume() {
    super.onResume();
    mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    /*OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);*/
}

this is the Logcat:

05-05 15:54:20.323  29948-29948/com.example.myapplication E/art﹕ No      implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
05-05 15:54:20.323  29948-29948/com.example.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.myapplication, PID: 29948
java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
1
  • 1
    why did you comment the last(correct) line in onResume ? you have to call OpenCVLoader.initAsync() , not mLoaderCallback.onManagerConnected() Commented May 5, 2015 at 13:28

1 Answer 1

1

Use the following steps:

  1. Create a loaderCallback variable to check for OpenCv in android studio in the main activty
private val mLoaderCallback: BaseLoaderCallback = object : BaseLoaderCallback(this) {
       override fun onManagerConnected(status: Int) {
           when (status) {
               SUCCESS -> {
                   Log.e("OpenCV", "OpenCV loaded successfully")
               }
               else -> {
                   super.onManagerConnected(status)
               }
           }
       }
   }
  1. In the onResume() of the main activity, check weather OpenCv has been loaded or not:
override fun onResume() {
    super.onResume()
    if (!OpenCVLoader.initDebug()) {
        Log.d(
            "OpenCV",
            "Internal OpenCV library not found. Using OpenCV Manager for initialization"
        )
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback)
    } else {
        Log.d("OpenCV", "OpenCV library found inside package. Using it!")
        mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS)
    }
}
  1. In the Activity--before calling any opencv operations or initialization Mat--call this:
.....
setContentView(R.layout.activity_main)
OpenCVLoader.initDebug()
 .....
  1. For the image you want to use, convert the bitmap of the image to mat:
val matObject = Mat()
Utils.bitmapToMat(mBitmap, matObject)

Here mBitmap is the bitmap of the image we want to use and Utils.bitmapToMat() is an in-built function of org.opencv.android* In your code, load the drawable as bitmap and then convert to mat.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.