android – 如何在没有OpenCv Manager的情况下运行OpenCV代码

android – 如何在没有OpenCv Manager的情况下运行OpenCV代码,第1张

概述我正在使用OpenCV4 Android版本2.4.10,我在三星Galayx GT-I9300上测试我的代码.我的问题是,我必须从Play商店下载Opencv Manager,以便我的opencv代码运行,否则App将无法启动. 我提到了一些postes“如此处所示 How to integrate OpenCV Manager in Android App”,知道如何在android上运行op 我正在使用OpenCV4 Android版本2.4.10,我在三星galayx GT-I9300上测试我的代码.我的问题是,我必须从Play商店下载Opencv Manager,以便我的opencv代码运行,否则App将无法启动.
我提到了一些postes“如此处所示 How to integrate OpenCV Manager in Android App”,知道如何在androID上运行opncv代码而无需下载OpenCV管理器
但不幸的是,只要没有安装OpenCV Manager,App就不会启动.

我尝试了以下

static {    if (!OpenCVLoader.initDeBUG()) {        // Handle initialization error    }}private BaseLoaderCallback mloaderCallback = new BaseLoaderCallback(this) {    @OverrIDe    public voID onManagerConnected(int status) {        switch (status) {            case LoaderCallbackInterface.SUCCESS:            {                Log.i(TAG,"OpenCV loaded successfully");                mOpenCvCameraview.enableVIEw();            } break;            default:            {                super.onManagerConnected(status);            } break;        }    }};.........@OverrIDepublic voID onResume() {    super.onResume();    Log.w(TAG,"onResume");    if (!OpenCVLoader.initDeBUG()) {        Log.d(TAG,"Internal OpenCV library not found. Using OpenCV Manager for initialization");        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10,getActivity(),mloaderCallback);    } else {        Log.d(TAG,"OpenCV library found insIDe package. Using it!");        mloaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);    }}

但这并没有解决问题.
请告诉我如何在不下载Opencv Manager的情况下在AndroID上运行opencv代码?

更新:

使用initAsync:

请你提供一个如何在App的生产版本中使用“initAsync()”的例子吗?因为我试图这样做但当然我不能在静态块中使用它,因为“intiAsync”的签名如下“OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10,this,mloaderCallback);”我不能使用“this”关键字,也不能引用静态块内的回调“mloaderCallback”

public class MainActivity extends AppCompatActivity {static {    //OpenCVLoader.initDeBUG();    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10,mloaderCallback); //this keyword and "mloaderCallback" are not defined in this scope}private BaseLoaderCallback mloaderCallback = new BaseLoaderCallback(this) {    @OverrIDe    public voID onManagerConnected(int status) {        switch (status) {            case LoaderCallbackInterface.SUCCESS: {                Log.i("MainActivity","OpenCV loaded successfully");            }            break;            default: {                super.onManagerConnected(status);            }            break;        }    }};@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    Mat m = new Mat(100,100,CvType.CV_8UC4);    Log.d("MainActivity","m.wIDth()" + m.wIDth());    Log.d("MainActivity","m.height()" + m.height());}}
解决方法 正如您想要的一步一步,我将从头开始创建一个SampleOpenCV项目,并建议在新项目中执行以下步骤,一旦开始工作,您可以尝试将更改迁移到主项目.

>从Opencv.org下载适用于AndroID的OpenCV软件包[Direct Download Link V3.1]
>将zip解压缩到您选择的位置,在AndroID Studio中打开SampleOpenCV项目,然后在file – >中打开.新 – >导入模块,将打开一个新的d出窗口进入模块路径,选择{unzipped_opencv} / sdk / java,这将在SampleOpenCV下创建一个OpenCVlibrary310目录.
>现在打开SampleOpenCV / OpenCVlibrary310 / build.gradle并从SampleOpenCV / app / build.gradle复制以下字段:

> compileSdkVersion
> buildToolsversion
> minSdkVersion
> targetSdkVersion

>现在右键单击SampleOpenCV项目并单击Open Module Settings,查找Modules>>应用程序并选择依赖项

>单击d出窗口中右上方的符号,然后选择3 Module Dependency.现在选择Opencvlibrary310.关闭d出窗口,让gradle同步.
>将libs文件夹{unzipped_opencv} / sdk / native / libs复制到app / src / main下的AndroID Studio,并将其重命名为jnilibs(请注意这里的情况).
>你完成了.

public class MainActivity extends AppCompatActivity {    static {        OpenCVLoader.initDeBUG();    }    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        Mat m = new Mat(100,CvType.CV_8UC4);    }}

注意:OpenCVLoader.initDeBUG()必须仅用于在计算机上进行本地开发时的调试目的.但对于需要在Play商店等发布应用程序的生产目的,您必须使用OpenCVLoader.initAsync().实际上,初始化OpenCVLoader需要一些时间,具体取决于手机.因此,如果你加载uisng initDeBUG(),那么它将在主线程中执行,这可能会阻止UI一段时间.因此建议在后台加载OpenCV,这可以使用initAsync()实现

更新的答案

如果您已完成所有步骤并获得java.lang.UnsatisfIEdlinkError,可能您缺少jnilibs或者您没有正确实现步骤6.

在您的应用级转换中添加此代码:

andriod{        sourceSets.main {                    jnilibs.srcDirs = ['libs']         }  }

在graddle sync之后,jnilibs会像这样显示出来

总结

以上是内存溢出为你收集整理的android – 如何在没有OpenCv Manager的情况下运行OpenCV代码全部内容,希望文章能够帮你解决android – 如何在没有OpenCv Manager的情况下运行OpenCV代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1121475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存