Java 使用OpenCV在Android Studio中加载和显示图像

Java 使用OpenCV在Android Studio中加载和显示图像,java,opencv,android-studio,Java,Opencv,Android Studio,我正试图使用OpenCV在Android Studio中加载和显示图像,但它崩溃了。我不知道问题出在哪里。。。 感谢您的帮助!谢谢 public class MainActivity2 extends Activity { private static final String TAG = "Kate : "; BaseLoaderCallback mOpenCVCallBack; Mat mRgba; ImageView imge1; @Override public void onCrea

我正试图使用OpenCV在Android Studio中加载和显示图像,但它崩溃了。我不知道问题出在哪里。。。 感谢您的帮助!谢谢

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);*/
}
这是日志:

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__)

使用以下步骤:

  • 在主活动中创建loaderCallback变量以检查android studio中的OpenCv
  • 在主活动的
    onResume()
    中,检查OpenCv是否已加载:
  • 在活动中——在调用任何
    opencv
    操作或初始化之前——调用以下命令:
  • 对于要使用的图像,请将图像的位图转换为mat:

  • 这里的
    mBitmap
    是我们要使用的图像的位图,
    Utils.bitmapToMat()
    org.opencv.android*
    的内置函数。在您的代码中,加载可绘制位图,然后转换为mat。

    为什么要在简历中注释最后一行(正确的)呢?您必须调用
    OpenCVLoader.initAsync()
    ,而不是
    mLoaderCallback.onManagerConnected()
    ,它可以工作!!非常感谢你!
    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)
                   }
               }
           }
       }
    
    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)
        }
    }
    
    .....
    setContentView(R.layout.activity_main)
    OpenCVLoader.initDebug()
     .....
    
    val matObject = Mat()
    Utils.bitmapToMat(mBitmap, matObject)