OpenCV 4.5.2环境配置 + 图片灰度化处理
一,OpenCV环境配置
注意:以下配置内容为Android开发环境配置好的基础上的OpenCV配置环境
1.官网下载OpenCV的sdk包,下载的是4.5.2的Android版本
Releases - OpenCV(https://opencv.org/releases/)
2. zip解压后,如下所示

3.将sdk作为module导入工程(File-New-Import Module)

4.在app模块中加入opencv模块的依赖
右击app-Open Module Settings-Dependencies-「+」-Module Dependencies-选择刚刚导入的opencv即可
或者直接在app模块的build.gradle中加入下面的代码
dependencies {
implementation project(path: ':opencv')
}
5.最后检查以下app模块和opencv模块的build.gradle中定义的minSdkVersion是否一致,如果不一致的话,修改为一致,不然编译的时候会报错
此处将app的minSdkVersion(16)修改为opencv模块定义的minSdkVersion(21)
二,测试代码(图片灰度化)
有部分代码是创建ndk工程的时候,自动创建的,红色部分是我添加的
1 package com.example.ocr
2
3 import android.graphics.BitmapFactory
4 import android.os.Bundle
5 import androidx.appcompat.app.AppCompatActivity
6 import com.example.ocr.databinding.ActivityMainBinding
7 import org.opencv.android.Utils
8 import org.opencv.core.Mat
9 import org.opencv.imgproc.Imgproc
10
11 class MainActivity : AppCompatActivity() {
12
13 private lateinit var binding: ActivityMainBinding
14
15 override fun onCreate(savedInstanceState: Bundle?) {
16 super.onCreate(savedInstanceState)
17
18 binding = ActivityMainBinding.inflate(layoutInflater)
19 setContentView(binding.root)
20
21 // Example of a call to a native method
22 binding.sampleText.text = stringFromJNI()
23
24 binding.toGrayBtn.setOnClickListener {
25 toGray()
26 }
27 }
28
29 /**
30 * 灰度化
31 */
32 private fun toGray() {
33 val bitmap = BitmapFactory.decodeResource(resources, R.drawable.ocr)
34 val rgbMat = Mat()
35 val grayMat = Mat()
36
37 Utils.bitmapToMat(bitmap, rgbMat)
38 Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_BGR2GRAY)
39 Utils.matToBitmap(grayMat, bitmap)
40 binding.bitmapView.setImageBitmap(bitmap)
41 rgbMat.release()
42 grayMat.release()
43 }
44
45 /**
46 * A native method that is implemented by the 'native-lib' native library,
47 * which is packaged with this application.
48 */
49 external fun stringFromJNI(): String
50
51 companion object {
52 // Used to load the 'native-lib' library on application startup.
53 init {
54 System.loadLibrary("native-lib")
55 System.loadLibrary("opencv_java4")
56 }
57 }
58 }
原图: 灰度化后的图:

三,Tips
虽然按照上面的步骤创建测试下来,用不了多长时候,但是在发现这个正确步骤之前,我按照网上博客的步骤,一直不成功。主要原因在于版本升级之后,以前的手顺不适用了,会报各种类型的错误。
如果按照上面的手顺不成功的,可以看一下下载的sdk目录下面的build文件,4.5.2的版本里面写了正确的步骤。
官方网址里面的步骤(OpenCV: Android Development with OpenCV)是旧的,导致我一直以为这个方式能成功。
四,用不适用的步骤导入过程中遇到的问题
1. java.lang.UnsatisfiedLinkError: dlopen failed: library "libopencv_java4.so" not found:
解决:将\OpenCV-android-sdk\sdk\native\libs目录下的libopencv_java4.so包复制到app模块的libs文件夹下时,so包上层的文件夹,如x86也要一并复制到libs下面,否则so不会被编译到apk中
2. java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found:
解决:添加下方的arguments
defaultConfig {
externalNativeBuild {
cmake {
cppFlags ''
arguments "-DANDROID_STL=c++_shared"
}
}
}
3.java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
解决:添加OpenCVLoader.initAsync()相关的方法,此方法是和OpenCV Manager一起使用的,现在已经废弃了。
官方现在推荐使用"System.loadLibrary("opencv_java4")" or "OpenCVLoader.initDebug()"
4.2021-07-13 14:36:58.402 7174-7174/com.example.socket E/OpenCV/StaticHelper: OpenCV error: Cannot load info library for OpenCV
解决:这个问题查了好久,有方案说去就版本里面下载opencvInfo.so,我下载了3.4.0里面还是没有这个so,更老的版本没有下载成功。
所以还是按照各自版本的步骤来配置吧,应该就不会有这个问题。
使用OpenCVLoader.initDebug()的方式也会报这个错,但是灰度化是有效的。使用System.loadLibrary("opencv_java4"),不会有这个错。
5.but it set OpenCV_FOUND to FALSE so package "OpenCV" is considered to be NOT FOUND.
解决:查看以下minSdkVersion是否设置的太低,设置为16的时候出现了这个问题,设置为21后消失。
OpenCV 4.5.2环境配置 + 图片灰度化处理的更多相关文章
- OpenCV 新手教程 之环境配置 + 图片匹配 matchTemplate
1.什么是OpenCV OpenCV的全称是:Open Source Computer Vision Library. OpenCV是一个基于(开源)发行的跨平台计算机视觉库,能够执行在Linux.W ...
- Atitit 图像处理 灰度图片 灰度化的原理与实现
Atitit 图像处理 灰度图片 灰度化的原理与实现 24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图 ...
- OpenCV+VS 2015开发环境配置
最近跑C程序,头文件中用到了OpenCV中的文件,找了很多篇OpenCV+VS的环境配置,发现如下这篇写的最为详细,特转载来自己的博客中留存,并附上原博客地址如下 OpenCV学习笔记(一)——Ope ...
- windows10下Anaconda的安装与tensorflow、opencv的安装与环境配置
刚开始学习tensorflow和opencv这一块的知识,所以用博客这个平台来把自己这段学习的经历与感想写下来. tensorflow和opencv则用Anaconda来下载和配置环境. 下载Anac ...
- Core Java 学习笔记——1.术语/环境配置/Eclipse汉化字体快捷键/API文档
今天起开始学习Java,学习用书为Core Java.之前有过C的经验.准备把自己学习这一本书时的各种想法,不易理解的,重要的都记录下来.希望以后回顾起来能温故知新吧.也希望自己能够坚持把自己学习这本 ...
- win7 32/64bit VS2010 OpenCV 2.4.9 环境配置
作者 : 卿笃军 因为近期人脸识别须要用到OpenCV,让我開始了OpenCV学习. OpenCV 2.4.9下载地址:http://sourceforge.net/projects/opencvli ...
- Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试
由于最近需要使用OpenCV,本人需要在自己的PC上使用OpenCV,因此最近一直在研究如何使用Visual Studio编译OpenCV源代码并搭建开发环境,折腾了很长时间,查阅了很多相关资料,终于 ...
- 在Android Studio上进行OpenCV 3.1开发环境配置
开发环境: Windows 7 x 64 家庭版 Android Studio 1.5.1(Gradle版本2.8) JDK 1.8.0 Android 6.0(API 23) OpenCV 3.1. ...
- opencv java swing 图片灰度化 二值化
工程下载地址 https://download.csdn.net/download/qq_16596909/11503860 基于maven 首先引入opencv <!-- https://mv ...
- OpenCV与Qt的环境搭建及Demo
前言: 前段时间写了很多OpenCV的程序,虽然重点在算法上,但图像窗口只能靠cvNamedWindow,效果很不理想.遂希望用Qt配合OpenCV使用,为我的程序建立图形化界面.然而,依我对Open ...
随机推荐
- Day22:数据库导入&分工&准备科研训练
今日完成的任务: 1.与组员共同排查jar包中的问题,发现是由于未导入数据库. 网上查询后在MySQL workbench中完成了导入导出(图中user数据库). 2.完成实验报告分工,我负责结论部分 ...
- 基于winds10 安装docker 踩坑记录
1.官方下载 https://www.docker.com/ 2.根据提示安装 并重庆计算机3.双击运行 报 Docker Desktop is shutting down 提示 计算机c: 盘 A ...
- thirty
数组中的方法 filter filter方法可以过滤符合条件的数值,返回一个新数组,可以利用filter和indexOf进行数组去重操作(indexOf返回的是该数组内的值第一次出现的索引,若无该值返 ...
- Vue中使用model属性
model属性接收两个参数 类型:{ prop?: string, event?: string } prop 也就是调用该组件的父组件中使用v-model指令绑定的属性 event 对应的是修改pr ...
- Django ImageField 内置属性height,width和size
ImageField实例使用height,width和size属性后,若后继操作需重新打开实例,其他模块方法才能调用实例,使用open()方法:>>> from PIL import ...
- 多线程学习(第一天)java语言的线程
一.并发与并行 并发:处理器不停的切换有操作的线程. 并行:多个处理器同时执行有操作线程. 二.启动线程 无论是A,B哪种方式实现多线程,都需要通过Thread.start方法启动线程. A.Thre ...
- spring Security 使用
1.pom文件引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- Android studio学习笔记2
Android studio学习笔记2 20201303张奕博 2023.1.14 android studio动态调试apk 1.配置环境 android studio需要安装插件:1,Smalid ...
- npm 包管理器run命令理解
npm run命令需和项目根目录下的package.json文件配合使用: npm run执行package.json文件的"scripts"属性中定义的命令,如下例: { & ...
- pgsql表结构复制
CREATE TABLE pavement_damage_dtl_temp(like pavement_damage_dtl); 搜索 复制