php中用if判断大月小月平月,OpenCV 3.0.0 Android native method not found: org.opencv.core.Mat.n_Mat:()J...

问题

I'm using native android Opencv 3.0.0 library for Xamarin.Android via Android Java Bindings Library .

I'm doing pretty same like this Tutorial and the problem is that i got this exception

Native method not found: org.opencv.core.Mat.n_Mat:()J

What can i do to resolve this problem? Any help will be appreciated,thanks!

My source code of Main Activity :

public class MainActivity : Activity

{

Mat m;

Mat grayM;

ImageView imageView;

public MainActivity()

{

if (!OpenCVLoader.InitDebug())

{

System.Console.WriteLine("GG");

}

}

protected override void OnCreate(Bundle bundle)

{

base.OnCreate(bundle);

SetContentView(Resource.Layout.Main);

Button button = FindViewById(Resource.Id.myButton);

ImageButton crop = FindViewById(Resource.Id.crop);

crop.Visibility = ViewStates.Invisible;

imageView = FindViewById(Resource.Id.IMG);

if (IsThereAnAppToTakePictures ())

{

CreateDirectoryForPictures ();

button.Click += delegate

{

Intent intent = new Intent (MediaStore.ActionImageCapture);

App._file = new File (App._dir, String.Format("myPhoto_{0}.jpg", System.Guid.NewGuid()));

intent.PutExtra (MediaStore.ExtraOutput, Android.Net.Uri.FromFile (App._file));

StartActivityForResult (intent, 0);

crop.Visibility = ViewStates.Visible;

// SetImg();

};

}

crop.Click += (sender, e) =>

{

SetImg();

};

}

void SetImg()

{

using (Bitmap _img = BitmapFactory.DecodeFile(App._file.Path))

{

if (_img != null)

{

m = new Mat();

grayM = new Mat();

Utils.BitmapToMat(_img, m);

Imgproc.CvtColor(m, grayM, Imgproc.ColorBgr2gray);

Imgproc.CvtColor(grayM, m, Imgproc.ColorGray2bgra);

using (Bitmap bit = Bitmap.CreateBitmap(m.Cols(), m.Rows(), Bitmap.Config.Argb8888))

{

Utils.BitmapToMat(bit,m);

imageView.SetImageBitmap(bit);

}

m.Release();

grayM.Release();

}

}

}

protected override void OnActivityResult (int requestCode, Result resultCode, Intent data)

{

base.OnActivityResult (requestCode, resultCode, data);

// Make it available in the gallery

Intent mediaScanIntent = new Intent (Intent.ActionMediaScannerScanFile);

Android.Net.Uri contentUri = Android.Net.Uri.FromFile (App._file);

mediaScanIntent.SetData (contentUri);

SendBroadcast (mediaScanIntent);

imageView.SetImageBitmap(BitmapFactory.DecodeFile(contentUri.Path));

// Dispose of the Java side bitmap.

GC.Collect();

}

private void CreateDirectoryForPictures ()

{

App._dir = new File (

Android.OS.Environment.GetExternalStoragePublicDirectory (

Android.OS.Environment.DirectoryPictures), "CameraAppDemo");

if (!App._dir.Exists ())

{

App._dir.Mkdirs( );

}

}

private bool IsThereAnAppToTakePictures ()

{

Intent intent = new Intent (MediaStore.ActionImageCapture);

IList availableActivities =

PackageManager.QueryIntentActivities (intent, PackageInfoFlags.MatchDefaultOnly);

return availableActivities != null && availableActivities.Count > 0;

}

}

public static class App

{

public static File _file;

public static File _dir;

public static Bitmap bitmap;

}

}

And Log of exception:

[MonoDroid] UNHANDLED EXCEPTION: [MonoDroid]

Java.Lang.UnsatisfiedLinkError: Exception of type

'Java.Lang.UnsatisfiedLinkError' was thrown. [MonoDroid] at

System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()

[0x0000b] in

/Users/builder/data/lanes/2058/58099c53/source/mono/mcs/class/corlib/System.Runtime.ExceptionServices/ExceptionDispatchInfo.cs:61

[MonoDroid] at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod

(intptr,intptr,intptr,Android.Runtime.JValue*) [0x00084] in

/Users/builder/data/lanes/2058/58099c53/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:1029

[MonoDroid] at Android.Runtime.JNIEnv.FinishCreateInstance

(intptr,intptr,intptr,Android.Runtime.JValue*) [0x0000b] in

/Users/builder/data/lanes/2058/58099c53/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:306

[MonoDroid] at Android.Runtime.JNIEnv.FinishCreateInstance

(intptr,intptr,intptr,Android.Runtime.JValue[]) [0x0001d] in

/Users/builder/data/lanes/2058/58099c53/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:312

[MonoDroid] at Org.Opencv.Core.Mat..ctor () [0x000da] in

回答1:

I tried to do some tricks with ILoaderCallbackInterface(implementation) :

public class LoaderCallBackHelper: Java.Lang.Object,ILoaderCallbackInterface

{

public void OnManagerConnected(int p0)

{

switch (p0)

{

case LoaderCallbackInterface.Success:

System.Console.WriteLine("Succes");

break;

default:

this.OnManagerConnected(p0);

break;

}

}

public void OnPackageInstall(int p0, IInstallCallbackInterface p1)

{

p1.Install();

System.Console.WriteLine(p1.PackageName);

}

Then something like this(on MainActivity):

ILoaderCallbackInterface t = new LoaderCallBackHelper();

public MainActivity()

{

if(OpenCVLoader.InitAsync(OpenCVLoader.OpencvVersion3000,this,t))

{

System.Console.WriteLine("OK");

}

}

and no luck.

Then i tried to do other trick :

public class BaseLoaderHelper : BaseLoaderCallback

{

public BaseLoaderHelper(Context context):base(context)

{

}

}

BaseLoaderCallback _t = new BaseLoaderHelper(this);

if(OpenCVLoader.InitAsync(OpenCVLoader.OpencvVersion3000,this,_t))

{

System.Console.WriteLine("OK");

}

}

And all was same,again OpenCV won't to initialise !

So my solution was that i downloaded OpenCV version 2.4.11 and reinstalled to my project. Now all works fines:

public MainActivity()

{

if (!OpenCVLoader.InitDebug())

{

System.Console.WriteLine("Failed to INIT \n OpenCV Failure");

}

else

{

System.Console.WriteLine("OpenCV INIT Succes");

}

}

来源:https://stackoverflow.com/questions/33105654/opencv-3-0-0-android-native-method-not-found-org-opencv-core-mat-n-matj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值