关于这个异常的原因不难发现是没有发现 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(); }
}