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

11

我想简单地将Android中的位图转换为OpenCV的Mat对象。在Stack Overflow上经常讨论这个主题,例如:

convert Mat to Bitmap Opencv for Android ;

在使用Android相机拍摄图像后将位图转换为Mat

在Android中进行模板匹配mattoBitmap opencv

甚至还可以找到更多。我按照这些答案中的说明操作,但仍然无法以正确的方式完成。

最小代码:

//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;

(注:图片是提供给这行代码的 Bitmap)

错误信息:

08-07 15:13:59.188: E/AndroidRuntime(2115): FATAL EXCEPTION: main

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;

非常感谢任何形式的帮助。 谢谢DanS


发现一个错误:忘记导出opencv库。(我是Java新手)新的错误是UnsatisfiedLink Error,如此处所述:https://dev59.com/YWgu5IYBdhLWcg3wDS-j - DanS
现在有了上面提到的链接,代码就可以正常工作了! - DanS
如果上面的链接有效,你能回答这个问题或关闭它吗? - GPPK
2个回答

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;
        }
    }
};

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

@Override
    protected void onResume() {
        super.onResume();
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_8, this,
                mOpenCVCallBack);
    }

就是这样,希望对你有所帮助 :D


0

你应该将OpenCV库依赖添加到你的安卓项目配置中(属性->Android->库 ->添加[opencv andrid prg])


2
请添加一些解释。 - Nilambar Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接