怎么在android中使用openCV检测车牌
本篇文章给大家分享的是有关怎么在android中使用openCV检测车牌,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1、导入module
先从官网下载openCVForAndroid的sdk,以3.2.0版本为例,找到依赖库路径,然后导入module。
2、导入动态与静态库
在sdk里面找到lib目录,把所有的.a和.so文件拷贝到项目的libs对应ABI路径下:
3、配置gradle
将依赖的静态库编译到native-libs里面:
tasknativeLibsToJar(type:Jar,description:'createajararchiveofthenativelibs'){ destinationDirfile("$buildDir/native-libs") baseName'native-libs' fromfileTree(dir:'libs',include:'**/*.so') into'lib/' } tasks.withType(JavaCompile){ compileTask->compileTask.dependsOn(nativeLibsToJar) } dependencies{ compilefileTree(include:['*.jar'],dir:'libs') compilefileTree(dir:"$buildDir/native-libs",include:'native-libs.jar') ...... }
好了,经过配置三步曲,我们就可以愉快地使用openCV了。
------------------------中场休息---------------------------
接下来是调用三步曲:加载openCV、初始化车牌检测器和执行车牌检测
1、加载openCV
调用openCVLoader去加载,如果加载成功进行下一步操作:
privatevoidinitOpenCV(){ booleanresult=OpenCVLoader.initDebug(); if(result){ Log.i(TAG,"initOpenCVsuccess..."); //初始化车牌检测器 mPlateDetector=newObjectDetector(this,R.raw.haarcascade_license_plate, 3,newScalar(255,0,0,0)); mObject=newMatOfRect(); }else{ Log.e(TAG,"initOpenCVfail..."); } }
2、初始化检测器
使用车牌检测的级联分类xml文件进行初始化:
/** *创建级联分类器 *@paramcontext上下文 *@paramid级联分类器ID *@return级联分类器 */ privateCascadeClassifiercreateDetector(Contextcontext,intid){ CascadeClassifierjavaDetector; InputStreamis=null; FileOutputStreamos=null; try{ is=context.getResources().openRawResource(id); FilecascadeDir=context.getDir(LICENSE_PLATE_MODEL,Context.MODE_PRIVATE); FilecascadeFile=newFile(cascadeDir,id+".xml"); os=newFileOutputStream(cascadeFile); byte[]buffer=newbyte[4096]; intbytesRead; while((bytesRead=is.read(buffer))!=-1){ os.write(buffer,0,bytesRead); } javaDetector=newCascadeClassifier(cascadeFile.getAbsolutePath()); if(javaDetector.empty()){ javaDetector=null; } booleandelete=cascadeDir.delete(); Log.i("ObjectDetector","deleteResult="+delete); returnjavaDetector; }catch(IOExceptione){ e.printStackTrace(); returnnull; }finally{ try{ if(null!=is){ is.close(); } if(null!=os){ os.close(); } }catch(IOExceptione){ e.printStackTrace(); } } }
3、执行车牌检测
由于openCV操作对象是Mat,所以我们得把Bitmap转成Mat,然后转成Gray灰度图去进行检测:
/** *执行车牌检测 *@parambitmapbitmap *@return车牌检测后的bitmap */ privateBitmapdoPlateDetecting(Bitmapbitmap){ if(mPlateDetector!=null&&bitmap!=null){ MatmRgba=newMat(); MatmGray=newMat(); //bitmap转成map Utils.bitmapToMat(bitmap,mRgba); //rgba转成灰度图 Imgproc.cvtColor(mRgba,mGray,Imgproc.COLOR_RGBA2GRAY); //检测车牌 Rect[]object=mPlateDetector.detectObject(mGray,mObject); if(object!=null&&object.length>0){ //检测到车牌区域 Rectrect=object[0]; //矩形标识 Imgproc.rectangle(mRgba,rect.tl(),rect.br(),mPlateDetector.getRectColor(),3); } //mat转回bitmap Utils.matToBitmap(mRgba,bitmap); } returnbitmap; }
其中,detectObject方法体是调用cascadeClassifier的detectMultiScale来完成检测的:
publicRect[]detectObject(Matgray,MatOfRectobject){ mCascadeClassifier.detectMultiScale( gray,//要检查的灰度图像 object,//检测到的车牌 1.1,//表示在前后两次相继的扫描中,搜索窗口的比例系数 mMinNeighbors,//默认是3 Objdetect.CASCADE_SCALE_IMAGE, getSize(gray,80),//检测目标最小值 getSize(gray,800));//检测目标最大值 returnobject.toArray(); }
以上就是怎么在android中使用openCV检测车牌,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注恰卡编程网行业资讯频道。
推荐阅读
-
我的世界windows版怎么下载手机版
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
怎么使用Android基准配置文件Baseline Profile方案提升启动速度...
-
HTML5如何实现禁止android视频另存为
HTML5如何实现禁止android视频另存为今天小编给大家分享一...
-
学java好还是学php好?
-
我的世界windows版怎么下载手机版
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
怎么使用Android基准配置文件Baseline Profile方案提升启动速度...
-
HTML5如何实现禁止android视频另存为
HTML5如何实现禁止android视频另存为今天小编给大家分享一...
-
学java好还是学php好?
-
我的世界windows版怎么下载手机版
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
怎么使用Android基准配置文件Baseline Profile方案提升启动速度...
-
HTML5如何实现禁止android视频另存为
HTML5如何实现禁止android视频另存为今天小编给大家分享一...
-
学java好还是学php好?