android - imread在Android的OpenCV中不起作用

这是我的代码:

package com.example.edgedetection;

import java.io.File;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
private BaseLoaderCallback  mOpenCVCallBack = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                    case LoaderCallbackInterface.SUCCESS:
                    {

                    } break;
                    default:
                    {
                        super.onManagerConnected(status);
                    } break;
                }
        }
        };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        double scale = 0.1;
        imageview =  (ImageView)this.findViewById(R.id.image_view);
        Bitmap bm1=BitmapFactory.decodeFile("/mnt/sdcard/test1.bmp");
        imageview.setImageBitmap(bm1);
        Mat img = Highgui.imread("/mnt/sdcard/test1.bmp",1);

        Size dsize = new Size(img.width()*scale,img.height()*scale);
        Mat img2 = new Mat(dsize,CvType.CV_8SC1);
        Mat img3 = new Mat();
        img.convertTo(img2, CvType.CV_8SC1);
        Imgproc.Canny(img, img3, 123, 250);

        boolean flag=Highgui.imwrite("mnt/sdcard/new.jpg", img3);
        if(flag)
        {
            File f = new File("mnt/sdcard/new.jpg");
            if(f.exists())
            {
                Bitmap bm=BitmapFactory.decodeFile("mnt/sdcard/new.jpg");
                imageview.setImageBitmap(bm);
            }
        }//end if
        else{
        Toast.makeText(MainActivity.this, "===========fail to write!============!!", 3).show();
        }
    }

    @Override
    public void onResume()
    {
        super.onResume();
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mOpenCVCallBack);
    }
}

我已经将OpenCV 2.4.9导入到我的项目中。当我尝试在Nexus 4上运行它时,它显示如下:
java.lang.UnsatisfiedLinkError: No implementation found for long
org.opencv.highgui.Highgui.imread_0(java.lang.String,int) (tried 
Java_org_opencv_highgui_Highgui_imread_10 and 
Java_org_opencv_highgui_Highgui_imread_10_Ljava_lang_String_2I)

有人可以帮我吗?

最佳答案

请将该代码从onCreate()移至onCameraViewStarted()或移至

case LoaderCallbackInterface.SUCCESS:
{
}

括号。

您不能在完成加载之前(即,(异步)mOpenCVCallBack完成之后)使用opencv代码。

https://stackoverflow.com/questions/24597805/

相关文章:

python-2.7 - 我的opencv python程序显示看似期望的短语,但既不终止也不允许进

python - Django、Docker、Python - 无法在 python-alpine

opencv - OpenCV:在Windows 7上构建库期间,cmake失败

android - 在Android应用程序开发中将OpenCV与NDK结合使用

python - 如何在 Python 中为 OpenCV minMaxLoc 函数创建掩码矩阵变量

opencv - channel 数-Matlab vs Opencv

docker - 如何将VM镜像转换为dockerfile?

android - 如何使用MediaCodec编码器获取RGB颜色格式的帧

opencv - opencv c++ HSV图像 channel 分离异常

opencv - OSX 10.9上的Macports-使用libstdc++编译opencv