今天跟着《深入OpenCV Android应用开发》学习,发现里面的很多内容有很多小错误,而且章节末还没有完整源代码,对新手来说非常的不友好,所以还是边学边记载自己学的过程中碰到的问题吧。

一、关于menu菜单的创建和menu的作用

参考这篇文章——创建menu菜单项

大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号。

这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:

xml文件代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/id_action_add"
        app:showAsAction="always"
        android:title="add"
        android:icon="@mipmap/ic_launcher"
        android:orderInCategory="1"
        />
    <item
        android:id="@+id/id_action_delete"
        app:showAsAction="always"
        android:title="jian"
        android:icon="@mipmap/ic_launcher"
        android:orderInCategory="1"
        />
</menu>

上面的两个item代表代表的是你菜单栏上面有几个按钮。这里的按钮区别于Button。android:icon中可以自定义菜单项的图片

下面讲一下今天对面opencv001和opencv003工程是发现的问题。opencv001是创建在Android studio3.0版本的。版本升级到3.0.1之后,之前的dependencies就发生了一下小变化

opencv001项目中,后面的Scope是compile,现在变成了Implementation。上网查过之后,发现确有其事。不同点参考下面这位的描述Android Studio3.0之后gradle.build中dependencie依赖由compile变为implementation。

然后我根据之前在Android studio上配置OpenCV开发环境时候的参考博客,基于Android Studio的OpenCV开发环境搭建笔记,后面再gradle中加入几行compile语句,我也将它改成了Implement,看下会不会有什么问题。

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    compile fileTree(dir: "$buildDir/native-libs", include:'native-libs.jar')//这一句是创建项目后新增的
    implementation 'com.android.support:appcompat-v7:26.1.0'

事实证明将compile改成implementation 并没有影响,功能是一样的。opencv001项目可以跟原来一样,正常的安装到模拟器上调试,且功能可以正常的实现。然而opencv003项目也按照同样的配置,调试的时候却会报“缺少opencv manager”的错误。所以我怀疑是opencv003项目MainActivity 中的代码出现了问题。于是我将opencv001中导入opencv库的函数部分去替换opencv003项目中的那部分函数(这两个加载库的函数我都没有弄透彻,所以接下来这个问题得好好研究研究)。opencv001中用于替换的代码如下:

private String TAG = "CVSAMPLE";

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

}

private void initLoadOpenCVLibs(){
    boolean success = OpenCVLoader.initDebug();
    if (success) {
        Log.i(TAG, " 类导入成功");
    } else {
        Log.i(TAG,"类导入失败");
    }
}

其中主要就是initLoadOpenCVLibs 这个方法,具体加载布局的那部分是不用替换。然后被替换的opencv003项目中的代码如下:

private BaseLoaderCallback mLoaderCallback =new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(intstatus) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS: {
                Log.i("OpenCVStatus","OpenCV loaded successfully");
            }
            break;
            default: {
                super.onManagerConnected(status);
            }
            break;
        }
    }
};

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);

替换完之后,重新编译,发现软件可以正常打开,具体功能打算到真机上测试,但是基本的按钮和菜单都是能正常显示的。

所以接下来的重点就是弄清楚这几行代码的玄机。这里解释一下,opencv003项目的代码,我是用的《深入 opencv Android应用开发》这本书,第二章的示例代码。在未更改前,我尝试过build APKs,生成的apk居然有100多M。(个人想法:个人觉得这个应该是将用到的opencv库生成了静态链接库,不然的话不会这么大)。之前调试opencv003的时候,报“缺少opencv manager”错误时,我去下载过一个opencv manager 3.2,里面有各种版本,但是将APK拖拽到genymotion模拟器中时,都显示无法安装,说架构不匹配。我也是服了,所以这里我就没有深究了,因为免安装opencv manager应该是opencv for Android开发的一个主流吧。

如果这部分功能正常实现的话,下一步尝试将之前写好的相机程序和这个程序整合一下,实现对拍摄到的图片进行及时处理。这样,最基础的一个框架就初步成形了,后续就是对Android图像处理方面的加强学习。

————————————分割线,今天是2018-01-16,加油加油~

按如上方法更改后,运行安装好的APP,logcat会报“类导入失败”的错误,继续参考基于Android Studio的OpenCV开发环境搭建笔记这篇文章,在build.gradle(app)中继续添加如下代码:

task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs'){
    destinationDir file("$buildDir/native-libs")
    baseName 'native-libs'
    from fileTree(dir: 'libs', include:'**/*.so')
    into 'lib/'

以及:

tasks.withType(JavaCompile){
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}

重新编译后运行,logcat显示“类导入成功”。在genymotion中调试,因为无相机图片,直接点击功能部分会闪退。所以转到真机上面进行调试。真机调试发现成功了,yeah。

效果图如下:

OpenCV4Android学习笔记一相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. 让我们定义一个ggplot版本的华夫饼图吧
  2. 郭天祥:我的大学六年
  3. Ext.Net学习笔记06:Ext.Net DirectEvents用方补充
  4. 在python面向对象编程中、属性分为_Python-面向对象编程(1.概述)
  5. SAP UI5 control focus related research
  6. 快速入门:OpenShift上的Spring Boot和WildfFly 8.2
  7. Flink的Window
  8. 黑夜主权个人团队html源码 简单修改即可使用
  9. django保存表单数据到数据库中
  10. [knowledge][basic][hardware] 内存的硬件结构(转)
  11. ubuntu20.04系统 ros noetic下安裝orbslam2
  12. 【数学建模】灰色模型
  13. 【常用表】三角函数基本公式
  14. Rayson API 框架分析系列之6: 客户端动态代理原理
  15. 计算机笔记本电脑加固态硬盘,笔记本固态硬盘,教您怎么给笔记本加固态硬盘...
  16. 清华大学计算机系张昕,程序设计语言的研究与发展——如何推进国内程序设计语言的教育和研究?丨CNCC技术论坛...
  17. 计算机图形学(第2版 于万波 于硕 编著)第45页的Bresenham算法有错误
  18. kernel下msm的版本信息
  19. 骑士旅行问题(骑士走棋盘)
  20. 北京极简智能科技有限公司正式加入信创运维工作组

热门文章

  1. PostgreSQL间隔时间(单位:分钟)
  2. 查看端口占用情况以及如何解除端口占用
  3. device的注册流程
  4. 从scratch到python轻松学下载_STEAM教育-[少儿创客] 从Scratch到Python——python turtle-电路城论坛 - 电子工程师学习交流园地...
  5. 吉林大学 十佳歌手 计算机科学与工程学院,CCF吉林大学学生分会完成换届
  6. 计算机与游戏制作自我评价,游戏设计/开发简历中的自我评价怎么写
  7. 推荐几个提升 win10 生产力的软件
  8. 谷歌(chrome)浏览器无法安装
  9. 64位系统魔兽服务器不兼容,魔兽世界Win7下出现不兼容问题的解决办法
  10. com.mysql.cj.jdbc.Driver