【问题标题】:Unsatisfiedlink error in Android using opencv使用opencv在Android中出现Unsatisfiedlink错误
【发布时间】:2014-12-30 14:31:55
【问题描述】:

当我尝试初始化 MAt 对象时,错误是 unsatisfiedLinkError。我在 opencv 加载成功后对其进行初始化。但再次出现错误。请提出您的意见。公共类 NextActivity 扩展 Activity 实现 OnItemSelectedListener{ 位图位图; 图像视图图像视图; 字符串 TAG="FinalCamera"; int selectedFilter,selectedKMap; 搜索栏搜索栏; 垫 imgMat,tmp;

    //native function
    //public native int convertNativeGray(long matAddrRgba, long matAddrGray,int selectedFilter,int ksize);





    //loading and connecting to opencv library
         private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
                @Override
                public void onManagerConnected(int status) {
                    switch (status) {
                        case LoaderCallbackInterface.SUCCESS:
                        {
                            System.loadLibrary("mixed_sample");
                            Log.i(TAG, "OpenCV loaded successfully");

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


        @Override    
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);
         imageView=(ImageView)findViewById(R.id.imageView1);
        // bitmap  = getIntent().getExtras().getParcelable("name");
        imageView.setImageBitmap(bitmap);
        //for spinner
         Spinner spinner = (Spinner) findViewById(R.id.filter_spinner);
          // Create an ArrayAdapter using the string array and a default spinner layout
          ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                  R.array.Filters, android.R.layout.simple_spinner_item);
          // Specify the layout to use when the list of choices appears
          adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
          // Apply the adapter to the spinner
          spinner.setAdapter(adapter);

          spinner.setOnItemSelectedListener(this);
          //for kmap
          seekBar = (SeekBar) findViewById(R.id.seekBar1);

          seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {


               public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {

                            selectedKMap = progresValue;
                            System.out.println("The selected KMap is"+selectedKMap);
                            }
              public void onStartTrackingTouch(SeekBar seekBar) {}
              public void onStopTrackingTouch(SeekBar seekBar) {}
             });
}
         @Override
public void onResume()
{
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
    realProcessing();   
}
public void realProcessing()
    {
        System.out.println("This is real processing");
        bitmap  = getIntent().getExtras().getParcelable("name");
         bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
           //here in below line there is error
            tmp = new Mat (bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC1);
           // imgMat = new Mat (bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC1);
          // Utils.bitmapToMat(bitmap, tmp);
           //convertNativeGray(tmp.getNativeObjAddr(), imgMat.getNativeObjAddr(),2,3);


           //Utils.matToBitmap(imgMat, bitmap);
         imageView.setImageBitmap(bitmap);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.next, menu);
        return true;
    }
    @Override
    //when seekbar an item is selected then this method will be called
    public void onItemSelected(AdapterView<?> parent, View view, 
            int pos, long id) {
        // TODO Auto-generated method stub
        selectedFilter=pos+1;
          System.out.println("This is selected filter="+selectedFilter);
    }
    @Override
    //when nothing changed this method will be called
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }
}

【问题讨论】:

    标签: android opencv


    【解决方案1】:

    在 mLoaderCallback 完成之前,您不能使用 opencv 代码。

    “我在成功加载 opencv 后对其进行初始化” - 嗯,不。你没有。

    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
    realProcessing();   
    

    OpenCVLoader.initAsync 异步

    您将不得不将您的 realProcessing 代码移至稍后阶段。要么在这里:

     public void onManagerConnected(int status) {
                    switch (status) {
                        case LoaderCallbackInterface.SUCCESS:
                        {
                            System.loadLibrary("mixed_sample");
                            Log.i(TAG, "OpenCV loaded successfully");
    
                            // yes, now it's safe !
    
    
                        } break;
    

    或者onCameraViewStarted(), onCameraFrame()。

    【讨论】:

    • 当我将代码移到 System.loadLibrary("mixed_sample") 下面时,它显示您的 nativemethod not found 错误是:=java.lang.UnsatisfiedLinkError: Native method not found: com.example。 finalcamera.NextActivity.convertNativeGray:(JJII)I
    • OpenCVLoader.initAsync 中的异步是什么意思
    • 在将本机函数删除到berek所说的地方并更改我的c ++函数名称后得到答案
    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2018-01-22
    • 2018-11-29
    • 1970-01-01
    • 2018-12-18
    相关资源
    最近更新 更多