暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Android App开发超实用实例 | OpenCV在Android手机上使用LoG算子检测边缘

743

下面这个实例演示了使用OpenCV在Android手机上使用LoG算子检测边缘。


01

实例功能


此实例主要通过使用Imgproc的filter2D()方法操作LoG算子,实现检测图像的轮廓边缘。LoG边缘检测算子是David Courtnay Marr和Ellen Hildreth于1980年共同提出的,也称为边缘检测算法或Marr & Hildreth算子;该算法首先对图像做高斯滤波,然后再求其拉普拉斯(Laplacian)二阶导数,即图像与 Laplacian of the Gaussian function 进行滤波运算,最后通过检测滤波结果的零交叉(Zero crossings)可以获得图像或物体的边缘,因而也被业界简称为Laplacian-of-Gaussian (LoG)算子。当实例运行之后,单击“显示原始图像”按钮,原始图像的效果如图1(a)所示。单击“检测图像边缘”按钮,图像的轮廓边缘检测结果如图1(b)所示。


■ 图1


02

实现代码


public void onClickButton1(View v) { //响应单击按钮“显示原始图像”
  myImageView.setImageBitmap(myBitmap);
 }
 public void onClickButton2(View v) { //响应单击按钮“检测图像边缘”
  Mat myMat=new Mat();
  Utils.bitmapToMat(myBitmap,myMat);
  //将原始图像转为灰度图像
  Imgproc.cvtColor(myMat,myMat,Imgproc.COLOR_RGBA2GRAY);
  Mat myNewMat=myMat.clone();
  //初始化Mat,用于存储LoG算子数值
  Mat myKernel=new Mat(5,5,CvType.CV_16SC1);
  //存入LoG算子所对应的卷积矩阵数值
  myKernel.put(0,0,0,0,1,0,0,
          0,1,2,1,0,
          1,2,-16,2,1,
          0,1,2,1,0,
          0,0,1,0,0);
  //根据LoG算子对原始图像进行边缘检测
  Imgproc.filter2D(myMat,myNewMat,-1,myKernel);
  Bitmap myNewBitmap=Bitmap.createBitmap(myNewMat.width(),
          myNewMat.height(), Bitmap.Config.RGB_565);
  //将轮廓图像输出至myNewBitmap
  Utils.matToBitmap(myNewMat,myNewBitmap);
  //通过ImageView控件显示轮廓图像
  myImageView.setImageBitmap(myNewBitmap);
 }
}


03

代码说明


上面这段代码在MyCode\MySampleM20\app\src\main\java\com\bin\luo\mysample\ MainActivity.java文件中。关于Imgproc的filter2D()方法的说明请参考实例102。

此实例的完整代码在MyCode\MySampleM20文件夹中。


04

补充说明


在测试代码时,必须保持网络畅通。


05

源代码下载

关注微信公众号,后台回复关键词 “Android App开发超实用代码103” 即可获得完整源代码。


06

参考书籍


扫码优惠购书


《Android App开发超实用代码集锦——jQuery Mobile+OpenCV+O》

ISBN:9787302589358

作者:罗帅、罗斌

定价:99元



问题描述+解决方案+真实源码+效果截图

介绍jQuery Mobile、OpenCV、OpenGL等在Android平台运行的应用

300个实例,提供完整源代码,边看边做边学



文章转载自清华计算机学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论