opencv4android移植到系统app
最近在尝试使用opencv4android实现投影仪的自动对焦功能,在AndroidStudio后需要将功能移到系统工程编译成系统app,仅以此文记录下移植过程中遇到的问题。
首先去opencv官网下载一份android的sdk, 然后在AndroidStudio中将opencv_android的sdk以module的方式导入工程,编译生成classes.jar,该文件包含了Opencv的api接口;具体方式可参考如下链接
https://blog.csdn.net/PZ0605/article/details/72778547?locationNum=12&fps=1
生成jar文件的路径会在对应应用路径下面的,根据opencv版本不同,略有不同
openCVLibrary340/build/intermediates/intermediate-jars/debug
获取jar文件后需要在Android.mk中导入该jar文件,以如下方式即可导入
LOCAL_STATIC_JAVA_LIBRARIES := \
opencv \
android-support-v4
include $(BUILD_PACKAGE) include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
opencv:lib/classes.jar
include $(BUILD_MULTI_PREBUILT)
这样,只要导入对应的包,就可以编译通过了。
下面讲下遇到的坑,大神请无视:
1.运行的时候提示unsatified link之类的错误,其实就是链接so失败了,后来阅读了下sdk代码后,在onResume中加入如下代码即可了
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0, this, baseLoaderCallback);
}
2.由于我实现的是自动对焦,所有起初我使用的是Opencv的JavaCameraView来显示摄像头采集到的图像,但是每次运行的时候都报找不到资源的问题,然后我就舍弃了opencv的这种方式,采用了Android的Camera类来实现这一功能
3.在使用Camera类保存图像的时候,发现每次调用完camera.takePicture后数据采集就停止了,所以不得不在保存图像后再次调用了camera.startPreview();
4.后续在做的时候,发现可以在onPreviewFrame中直接保存图片,由于该函数的数据为YUV数据,所以转成jpg需要用到YuvImage类,通过其中的yuvImage.compressToJpeg可以将YUV数据成功保存成jpg图片
贴下实现的代码:
其中Rect中的width和height,表示显示的区域,可用于裁剪
Camera.Size size = camera.getParameters().getPreviewSize();
int w = size.width;
int h = size.height;
saveMyBitmap(FileName, bytes, w, h);
public static void saveMyBitmap(String filePath,byte[] data,int width,int high){
File f = new File(filePath);
try {
f.createNewFile();
} catch (IOException e) {
}
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
YuvImage yuvImage = new YuvImage(data,ImageFormat.NV21,width,high, null);
try {
yuvImage.compressToJpeg(new Rect(0,0,width,high),50,fOut);
}catch (Exception e){
}
try {
fOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
5.在做的时候,起初使用的SurfaceView,必须在SurfaceView中显示拍摄到的图像才能调用onPreviewFrame,感觉十分蛋疼,然后机缘巧合下找到了这个SurfaceTexture的实现方式:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); getPermission();
surfaceviewer = (SurfaceView)findViewById(R.id.surfaceviewer);
imageView = (ImageView)findViewById(R.id.imv);
imageView.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.fouse)); surfaceholder = surfaceviewer.getHolder();
surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceholder.addCallback(AutoFouse.this); surfaceTexture = new SurfaceTexture(10);
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
// TODO Auto-generated method stub
// 获取camera对象
camera = Camera.open();
try {
// 设置预览监听
//camera.setPreviewDisplay(surfaceHolder);
camera.setPreviewTexture(surfaceTexture);
opencv4android移植到系统app的更多相关文章
- iOS系统app崩溃日志手动符号化
iOS系统app崩溃日志手动符号化步骤: 1.在桌面建立一个crash文件夹,将symbolicatecrash工具..crash文件..dSYM文件放到该文件夹中 a.如何查询symbolicate ...
- 报课系统APP
031302307黄丰润 031302343张晓燕 #NABCD模型分析 合理分析需求有助于说服客户,所以我们有如下分析 N(need)--客户需要什么 负责人需要将选课信息和选课表格一起发送给所负责 ...
- 获取设备上全部系统app信息
在获取android设备的全部程序信息一文中介绍了获取手机上全部app信息的方法,以下介绍过滤掉系统app的方法: MainActivity: package com.home.getsysapp; ...
- 你我公益模式系统APP开发
你我公益模式系统APP开发(微or电 158.1500.1390 小凡团队)你我公益系统开发,你我公益系统模式定制,你我公益系统开发软件,你我公益平台系统开发. 互联网世界无边无界,互联网创业者应敢于 ...
- 消费创富会开发模式系统App
消费创富会系统定制开发,消费创富会网页开发模式,消费创富会开发软件,消费创富会系统APP开发,消费创富会平台模式开发,专业开发微信商城分销.公排.全返.分红.互助等模式定制开发,APP.网页版.微信端 ...
- 外呼系统APP外呼软件手机电销软件拨号销售软件功能设计
外呼系统APP外呼软件 1 系统概述 该软件系统设计功能主要为贷款.投资.资产管理等金融中介公司提供方便快捷的线上管理各类资源的一款应用软件工具. 可根据不同职位的账号登录APP来管理电话营销.客户签 ...
- Android Studio搭建系统App开发环境
一.前言 在Android的体系中开发普通app使用Android Studio这一利器会非常的方便.但是开发系统app可能就会有些吃力,不过经过一些配置仍然会 很简单.我们知道系统app因为涉及到一 ...
- ZLC众利币系统APP开发
开发版本:APP 开发语言:php,java,.net 下面我们来看一下tp5 分页具体怎么用: 一, 分页简洁版 简洁分页仅仅只有上下页的分页输出,可以使用下面的简洁分页代码: // 查询状态为1的 ...
- 利用系统APP实现导航---By张秀清
苹果系统本身自带一个地图APP,但是功能并不是很强大,但是一些简单的导航功能还是能做出来的,下面贴上我的代码 // // ViewController.m // 系统APP导航 // // Creat ...
随机推荐
- Ant中批量调用TestNG的XML文件,并调用TestNgXlst生成漂亮的html测试报告
from:http://blog.csdn.net/bwgang/article/details/7865184 1.在Ant中设置如下: <target name="run_test ...
- jsp_类的封装_集合的应用
一.需求分析 做一个jsp页面,动态显示信息表的内容. 1.做一个实体类:StudentInfo(包含4个字段) 2.如图模拟生成3条数据,本质上就是new StudentInfo 3个实例, 每一个 ...
- web 开发之js---ajax 中的两种提交方式ajax post 和 ajax get 实例
()post http://04101334.iteye.com/blog/637695/ ()get function serializeElement(element) { var method ...
- 2016/3/24 ①数据库与php连接 三种输出fetch_row()、fetch_all()、fetch_assoc() ②增删改时判断(布尔型) ③表与表之间的联动 ④下拉菜单 ⑤登陆 三个页面
①数据库与php连接 图表 header("content-type:text/html;charset=utf-8"); //第一种方式: //1,生成连接,连接到数据库上的 ...
- Spring Boot Spring 自动配置
Spring Boot 不是应用服务器: Spring Boot没有实现诸如JPA.JMS(Java Message Service)之类的Java企业级规范: Spring Boot没有引入任何形式 ...
- command 'gcc' failed with exit status 1
https://stackoverflow.com/questions/11094718/error-command-gcc-failed-with-exit-status-1-while-insta ...
- maven配置篇
1,windows A)安装maven之前,确认已正确安装JDK B)下载maven http://maven.apache.org/download.html C)将压缩包解压到指定目录,E:\ap ...
- OpenMediaVault 系统安装问题
/********************************************************************* * OpenMediaVault 系统安装问题 * 说明: ...
- 并不对劲的bzoj4816:loj2000:p3704[SDOI2017]数字表格
题目大意 有函数\(f(x)\),\(f(0)=0,f(1)=1,f(x)=f(x-1)+f(x-2)\) \(t\)(\(t\leq1000\))组询问,每次给定\(n,m\)(\(n,m\leq1 ...
- BZOJ4561:圆的异或并(扫描线+set||splay||线段树)
在平面直角坐标系中给定N个圆.已知这些圆两两没有交点,即两圆的关系只存在相离和包含.求这些圆的异或面 积并.异或面积并为:当一片区域在奇数个圆内则计算其面积,当一片区域在偶数个圆内则不考虑. I ...