Android OpenCV java.lang.UnsatisfiedLinkError n_mat

来源:互联网 发布:软件开发费用包括 编辑:程序博客网 时间:2024/04/30 13:52

关于这个异常的原因不难发现是没有发现 OpenCV native(本地化)库。

也就是说,Opencv 的库还没有加载就,调用了本地化方法

public class MainActivity extends Activity {
  


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);       
//创建数据对象
               Mat mat=new Mat();//此时会出现异常因为本地化方法n_mat并没有加
}
}

如何解决呢:如下红色部分。



package com.example.kyleopencvtogray;




public class MainActivity extends Activity implements OnClickListener{
    private static final String    TAG                 = "OCVSample::Activity";


    private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {


@Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS:
                {
                    Log.i(TAG, "OpenCV loaded successfully");


                 
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };


private Button btn;





    
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//初始化函数库
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
}


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button)findViewById(R.id.button1);
iv=(ImageView)findViewById(R.id.imView);
btn.setOnClickListener(this);

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private  Mat matSrc,matDst;
private Bitmap bmp_show;
private ImageView iv;


@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//初始化必须的
matDst=new Mat();
matSrc=new Mat();
Bitmap bp=BitmapFactory.decodeResource(this.getResources(),R.drawable.im_show);
Utils.bitmapToMat(bp, matSrc);
bmp_show=Bitmap.createBitmap(bp.getWidth(),bp.getHeight(),Config.RGB_565);
/*********下面的函数无法使用,因为转换 Mat 的编码方式不同************/
// try {
// matDst =Utils.loadResource(this, R.drawable.im_show,CvType.CV_8UC4);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
Imgproc.cvtColor(matSrc, matDst, Imgproc.COLOR_RGBA2GRAY);
//Core.flip(matSrc, matDst,1);
Utils.matToBitmap(matDst, bmp_show);
iv.setImageBitmap(bmp_show);
 Dialog alertDialog = new AlertDialog.Builder(MainActivity.this). 
               setTitle("对话框的标题"). 
               setMessage("对话框的内容"). 
               setIcon(R.drawable.ic_launcher). 
               create(); 
       alertDialog.show(); }






}