转换的Android位图OpenCV的垫子和倒退 [英] Convert Android Bitmap to OpenCV Mat and backwards
问题描述
我想简单地转换为位图,从机器人到了OpenCV的一个垫目标。本主题往往不客气堆栈溢出。例如:
I wanted to simply convert a bitmap from Android to a Mat object for OpenCV. This topic is often adressed on Stack Overflow. For example:
转换垫为位图OpenCV进行Android的; <一href="http://stackoverflow.com/questions/17390289/convert-bitmap-to-mat-after-capture-image-using-android-camera?rq=1">convert位图使用Android摄像头捕获图像之后,太; <一href="http://stackoverflow.com/questions/13900247/templatematching-mattobitmap-opencv-for-android?lq=1">templateMatching mattoBitmap OpenCV的Android版
convert Mat to Bitmap Opencv for Android ; convert Bitmap to Mat after capture image using android camera ; templateMatching mattoBitmap opencv for android
甚至有更多的发现。我跟着这个答案instrcutions,但我仍然无法得到的是做了正确的方式。
There is even more to find. I followed the instrcutions in this answers, but I'm still unable to get is done the right way.
最小的code:
//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;
(注:图片是提供给该行的code位图)
(note: image is a Bitmap supplied to this lines of code)
错误: 08-07 15:13:59.188:E / AndroidRuntime(2115):致命异常:主要
Errors: 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
08-07 15:13:59.188: E/AndroidRuntime(2115): java.lang.NoClassDefFoundError: org.opencv.core.Mat
但我impots是:
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;
真的AP preciate任何形式的帮助。 由于丹斯
Would really appreciate any sort of help. Thanks DanS
推荐答案
您只能使用OpenCV的做你的工作,它初始化后。 所以,你需要初始化这样的:
You only can do your work with OpenCV after it is initialized. So you need to initialize it like that:
-
创建一个回调:
Create a Callback:
私人BaseLoaderCallback mOpenCVCallBack =新BaseLoaderCallback(本){
@覆盖
公共无效onManagerConnected(INT状态){
开关(状态){
案例LoaderCallbackInterface.SUCCESS:
//做你的工作/东西在这里
打破;
默认:
super.onManagerConnected(状态);
打破;
}
}
};
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;
}
}
};
@覆盖
保护无效onResume(){
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_8,这一点,
mOpenCVCallBack);
}
和多数民众赞成它,我希望它是有益的:D
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_8, this,
mOpenCVCallBack);
}
and thats it, i hope it was helpful :D
这篇关于转换的Android位图OpenCV的垫子和倒退的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!