将Android位图转换为OpenCV Mat并向后转换

Dan*_*anS 11 android opencv android-bitmap

我想简单地将位图从Android转换为OpenCV的Mat对象.Stack Overflow上经常讨论此主题.例如:

将Mat转换为Android的Bitmap Opencv ;

使用android相机捕获图像后将Bitmap转换为Mat ;

templateMatching mattoBitmap opencv for android

还有更多要找.我在这个答案中遵循了这个问题,但我仍然无法以正确的方式完成任务.

最小代码:

//First convert Bitmap to Mat
Mat ImageMat = new Mat ( image.getHeight(), image.getWidth(), CvType.CV_8U, new Scalar(4));
Bitmap myBitmap32 = image.copy(Bitmap.Config.ARGB_8888, true);
Utils.bitmapToMat(myBitmap32, ImageMat);

//Do smth.
Imgproc.cvtColor(ImageMat, ImageMat, Imgproc.COLOR_RGB2GRAY,4);

//Then convert the processed Mat to Bitmap
Bitmap resultBitmap = Bitmap.createBitmap(ImageMat.cols(),  ImageMat.rows(),Bitmap.Config.ARGB_8888);;
Utils.matToBitmap(ImageMat, resultBitmap);

//Set member to the Result Bitmap. This member is displayed in an ImageView
mResult = resultBitmap;
Run Code Online (Sandbox Code Playgroud)

(注意:图像是提供给这行代码的位图)

错误:

08-07 15:13:59.188:E/AndroidRuntime(2115):致命异常:主要

08-07 15:13:59.188:E/AndroidRuntime(2115):java.lang.NoClassDefFoundError:org.opencv.core.Mat

但我的进口是:

import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;


//OpenCV
import org.opencv.android.Utils;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助.谢谢DanS

Mer*_*ert 1

您只有在初始化后才能使用 OpenCV 进行工作。所以你需要像这样初始化它:

1.创建回调:

private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
        case LoaderCallbackInterface.SUCCESS:
            //DO YOUR WORK/STUFF HERE 
            break;
        default:
            super.onManagerConnected(status);
            break;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

2.您需要在 Activity 的 onResume 方法中初始化回调:

@Override
    protected void onResume() {
        super.onResume();
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_8, this,
                mOpenCVCallBack);
    }
Run Code Online (Sandbox Code Playgroud)

就是这样,我希望它有帮助:D