【Android】opencv图像处理之提取骨架
2017-01-01 14:32
519 查看
在网上找了好多股价提取的实例,有关android的,实在都不能用,最后只好动手按照书中的算法实现,记录在此。
算法参看自《数字图像处理(第三版)》Rafae C.Gonzalez, Richard E. Woods著, 阮秋琦 阮宇智 等译,
第418页。
代码如下
处理结果如下图
代码可以从如下地址获取
https://github.com/carlzhangweiwen/autumnsinger_opencv/blob/master/app/src/main/java/com/autumnsinger/opencv/util/PictureUtils.java
android环境opencv开发搭建过程:Android Studio中Opencv的开发环境搭建过程
算法参看自《数字图像处理(第三版)》Rafae C.Gonzalez, Richard E. Woods著, 阮秋琦 阮宇智 等译,
第418页。
代码如下
/** * 骨架 * 参考http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/ * @param picture * @param picture_result */ public static void skeleton(ImageView picture, ImageView picture_result){ picture.setDrawingCacheEnabled(true); picture.buildDrawingCache(); Bitmap bitmap = ((BitmapDrawable) picture.getDrawable()).getBitmap(); System.loadLibrary("opencv_java3"); Mat src = new Mat(); Utils.bitmapToMat(bitmap, src); Imgproc.cvtColor(src, src, Imgproc.COLOR_BGR2GRAY);//转换成灰度图 Imgproc.threshold(src, src, 1, 255,Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);//阈值处理,将灰度图处理成二值图 Mat dst = src.clone(); int K = 0;//腐蚀至消失的次数 Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_CROSS, new Size(3,3)); Mat res = null;//骨架操作的结果 do{ Mat dst2 = new Mat(); Imgproc.morphologyEx(dst, dst2, Imgproc.MORPH_OPEN, element);//图像开操作 Mat tmp = new Mat(); Core.subtract(dst, dst2, tmp);//图像减操作 if(res == null){ res = tmp; }else { Core.add(tmp, res, res);//图像加操作 } K++; Imgproc.erode(src, dst, element, new Point(-1, -1), K);//图像腐蚀 }while (Core.countNonZero(dst) > 0); ConstantMorph.MY_MAT = res;//操作结果 ConstantMorph.MY_COUNT = K;//记录下操作次数,用于骨架重构 Bitmap tmpbitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(res, tmpbitmap); picture_result.setImageBitmap(tmpbitmap); picture.setDrawingCacheEnabled(false); }
处理结果如下图
代码可以从如下地址获取
https://github.com/carlzhangweiwen/autumnsinger_opencv/blob/master/app/src/main/java/com/autumnsinger/opencv/util/PictureUtils.java
android环境opencv开发搭建过程:Android Studio中Opencv的开发环境搭建过程
相关文章推荐
- Android与OpenCV2.4.4(2013最新)搭建图像处理框架
- android开发在jni中使用Opencv进行图像处理,环境搭建篇
- Android Studio + NDK JNI调用openCV图像处理
- 实时显示 Opencv处理后的Camera图像 AndroidStudio NDK方法
- 【OpenCV图像处理】二十一、形态学滤波角点的提取
- 【OpenCV学习笔记】之四:二值图像细化方法/骨架提取----基于2.0 Mat接口
- 【Android】OpenCV图像处理的学习
- opencv 骨架提取/图像细化
- Android上使用OpenCV处理图像
- 利用OPENCV为android相机开发图像处理库
- Android与OpenCV2.4.4(2013最新)搭建图像处理框架
- 地形纹理贴图处理辅助之: osg结合OpenCv实现对图像的轮廓提取、剪裁、投影及综合处理
- Android调用OpenCV-图像处理系统开发备忘
- 基于Opencv的Android图像处理(Eclipse和ndk)
- [Mo]OpenNI+OpenCV处理kinect深度图,获取手掌骨架图像
- android 使用NDK进行图像处理(openCV)时的图像转换问题(灰度图显示)
- [Mo]OpenNI+OpenCV处理kinect深度图,获取手掌骨架图像
- 二值图像--形态学处理4 击中,边界提取,孔洞填充,连通分量提取,凸壳,细化,骨架,形态学重建
- 【OpenCV3图像处理】提取轮廓的凸包、外包矩形、最小外包矩形、最小外包圆
- OpenCV学习笔记(七)—— OpenCV for Android实时图像处理