Android配置OpenCV C++开发环境
网上的OpenCV配置环境大部分都不能正常配置成功,不是编译时报找不到so,就是运行找不到so.本文是我试了不少坑才找到的配置方法.其原理是让AndroidStudio自己根据mk文件自动配置.
1.下载OpenCV
先去OpenCV官网下载OpenCV的Android版本.速度慢的可以用迅雷下载.
下载完成之后解压到文件夹
2.AndroidStudio新建C++项目
新建项目选择nativeC++模板.
C++标准选默认就好了
创建完成之后如果以前没配置过NDK可能会报错.
打开 Project Structue
切换到 SDK Location
标签下,选择一个已安装的NDK即可.
如果没有NDK可供选择,需要先下载NDK.打开 SDK Manager
选择一个合适的版本下载就好,建议不要下载最新版本.
3.配置OpenCV开发环境
在配置OpenCV开发环境之前,可以安装运行一下看一下有没有报错,第一次运行会有较长加载so库的时间.
3.1配置include头文件
找到之前解压好的opencv-4.5.5-android-sdk文件夹,复制下面的 OpenCV-android-sdk\sdk\native\jni\include
文件夹到 src/main/cpp
文件夹下.
3.2配置CMakeLists.txt文件
将以下内容复制替换到 cpp/CMakeLists.txt
注意将里面的opencv路径替换为自己电脑上的路径.注意斜杆
cmake_minimum_required(VERSION 3.4.1)
# ##################### OpenCV 环境 ############################
#设置OpenCV-android-sdk路径,替换为自己电脑上的路径,注意是双斜杠或者反斜杠
set( OpenCV_DIR D:\\Develop\\OpenCV\\opencv-4.5.5-android-sdk\\OpenCV-android-sdk\\sdk\\native\\jni )
find_package(OpenCV REQUIRED )
if(OpenCV_FOUND)
include_directories(${OpenCV_INCLUDE_DIRS})
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
else(OpenCV_FOUND)
message(FATAL_ERROR "OpenCV library not found")
endif(OpenCV_FOUND)
# ###################### 项目原生模块 ###########################
add_library( native-lib
SHARED
native-lib.cpp
)
#jnigraphics是Android bitmap处理库,如果需要在JNI处理bitmap对象,需要添加引用
target_link_libraries( native-lib
${OpenCV_LIBS}
log
jnigraphics)
4.验证OpenCV是否配置成功
4.1验证头文件是否配置成功
重新build之后打开 native-lib.cpp
导入OpenCV的头文件.如果有提示说明头文件配置成功.
4.2验证OpenCV库是否正确链接到
打开 native-lib.cpp
找到默认生成的stringFromJNI方法
extern "C" JNIEXPORT jstring JNICALL
Java_komine_demos_opencvdemo_MainActivity_stringFromJNI(JNIEnv* env,jobject thiz) {
//添加这行声明
cv::Mat mat;
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
运行如果没有报错说明OpenCV配置成功
4.3简单使用OpenCV进行图片处理
首先在 MainActivity
中声明一个processImage native方法,新版AndroidStudio再也不需要通过javah去生成头文件了,
直接 Alt + Enter
生成native的方法声明,我的AndroidStudio版本是3.6.3,高于3.0的应该都能自动生成.
为了更方便使用OpenCV的类,可以导入cv命名空间
//写在include语句的下方
using namespace cv;
native实现
extern "C"
JNIEXPORT void JNICALL
Java_komine_demos_opencvdemo_MainActivity_processImage(JNIEnv *env, jobject thiz,jstring image_path,jstring outPath) {
//将jstring转换为const char*
const char* path = env->GetStringUTFChars(image_path,NULL);
const char* imageOutPath = env->GetStringUTFChars(outPath,NULL);
//读取mat对象
Mat sourceMat = imread(path);
//灰度mat
Mat grayMat;
//将图片转换为灰度图
cvtColor(sourceMat,grayMat,COLOR_BGR2GRAY);
//将图片写入到文件
imwrite(imageOutPath,grayMat);
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显示灰度图"
android:onClick="loadGrayImage"
/>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private ImageView mImageView;
private String mOutputPath;
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = findViewById(R.id.image);
//注意读写权限,或者将图片upload到files目录
String sourcePath = Environment.getExternalStorageDirectory() + File.separator + "miku.png";
mOutputPath = Environment.getExternalStorageDirectory() + File.separator + "miku_gray.png";
processImage(sourcePath,mOutputPath);
}
public void loadGrayImage(View view) {
mImageView.setImageBitmap(BitmapFactory.decodeFile(mOutputPath));
}
public native void processImage(String imagePath,String outPath);
}
效果图
Android配置OpenCV C++开发环境的更多相关文章
- [Android] 环境配置之基础开发环境(SDK/Android Studio)(转)
[Android] 环境配置之基础开发环境(SDK/Android Studio) 博客: blog.csdn.net/qiujuer 网站: www.qiujuer.net 开源库: Geniu ...
- Android Studio C/C++开发环境配置
Android Studio C/C++开发环境配置 我的开发环境 : Win 10 + android studio 1.5 一, 安装NDK 开发环境: 1. Settings -> ...
- Eclipse+ADT+Android SDK 搭建安卓开发环境
Eclipse+ADT+Android SDK 搭建安卓开发环境 要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位); eclipse-jee-luna-SR2 ...
- 解决 Ubuntu 18.10 使用较新的独立显卡输出无法初始化图形界面并配置深度学习开发环境
原文地址:解决 Ubuntu 18.10 使用较新的独立显卡输出无法初始化图形界面并配置深度学习开发环境 0x00 配置 硬件 OS: Ubuntu 18.10 Base Board: ASUS WS ...
- [webpack] 配置react+es6开发环境
写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...
- EditPlus+VisualStudio配置VC简易开发环境环境
对于C++开发, 我想在Windows下大家用的最多的应该是MS的VC++.但其强大的功能背后却有着"启动速度慢","占用资源多"的缺点,尤其是VS后 ...
- Ubuntu下配置C/C++开发环境
在 Ubuntu 下配置 C/C++ 开发环境 转自:白巴的临时空间 Submitted by 白巴 on 2009-04-27 19:52:12. 学习笔记 虽然 Ubuntu 的版本已经是9.04 ...
- 在VMware虚拟机中配置DOS汇编开发环境!!
操作系统:win7 32位 DOS环境:DosBox 下载:http://www.dosbox.com/ 选择当前适合自己版本,下载就可以了. 汇编编译器:MASM 5.0 下载:http://do ...
- 在windows下用eclipse + pydev插件来配置python的开发环境
在windows下用eclipse + pydev插件来配置python的开发环境 一.安装 python 可以到网上下个Windows版的python,官网为:https://www.python. ...
随机推荐
- Javaer 面试必背系列!超高频八股之三色标记法
可达性分析可以分成两个阶段 根节点枚举 从根节点开始遍历对象图 前文提到过,在可达性分析中,第一阶段 "根节点枚举" 是必须 STW 的,不然如果分析过程中用户进程还在运行,就可能 ...
- npm发布包以及更新包还有需要注意的几点问题(这里以发布vue插件为例)
前言 在此之前,你需要去npm官网注册一个属于自己的账号,记住自己的账户名以及密码.邮箱,后面会用的到.第一步,安装webpack简易框架 vue init webpack-simple marque ...
- 从0到1搭建一款页面自适应组件(Vue.js)
组件将根据屏幕比例及当前浏览器窗口大小,自动进行缩放处理. 建议在组件内使用百分比搭配flex进行布局,以便于在不同的分辨率下得到较为一致的展示效果.使用前请注意将body的margin设为0,否则会 ...
- java web 三层架构设计
界面层(表示层):用户看得到的,可以通过此与服务器交互 业务逻辑层:处理业务逻辑. 数据访问层:操作数据存储文件
- POI 给单元格添加批注
图中红框框是处理单元格内容和批注的地方. 参考:https://blog.csdn.net/qq_38974638/article/details/114837631 //SXSSFWorkbook ...
- cookie、session、tooken
一.cookie 的诞生 首先需要知道Http协议的无状态连接的,即这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的. 服务端,既不知道上一次请求和这一次请求的关联,也无法知道哪一个客户 ...
- 生成RSA密钥的方法[转载]
openssl genrsa -des3 -out privkey.pem 2048 这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码,如果你不想要每次都输入密码,可以改成(测试常 ...
- android studio取消设置代理
看标题感觉就是一个简单的设置,其实只是个大坑啊 https://www.jianshu.com/p/bb6d2bcdd5b5 android studio内虽然设置了 no proxy,但是没起作用, ...
- 2022-07-09 第六组 润土 CSS学习笔记
HTML:用来描述网页的一种语言. 超文本语言.动画.音频.视频.特效.超链. 用标签定义网页 浏览器 流行浏览器: IE微软宣布永久关闭 firefox火狐 Chrom谷歌 Sarifi vscod ...
- 微信小程序使用echarts/数据刷新重新渲染/图层遮挡问题
1.微信小程序使用echarts,首先下载echarts并导入小程序项目中,因小程序后期上线对文件大小有要求,所以建议进行定制下载导入可减少文件大小占比,也可以下载以前旧版本文件比较小的应付使用 下载 ...