我想简单地将位图从Android转换为OpenCV的Mat对象。 Stack Overflow上经常讨论此主题。例如:
convert Mat to Bitmap Opencv for Android;
convert Bitmap to Mat after capture image using android camera;
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;
(注意:图像是提供给这行代码的位图)
错误:
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;
非常感谢任何帮助。 谢谢DanS
答案 0 :(得分: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
答案 1 :(得分:0)
你应该将OpenCV lib dependecy添加到你的android prj config(properties-> Android-> Library - > add [opencv andrid prg])