在 Android智能识别 - 银行卡区域裁剪 一文中我们用了如下几行代码,获取发现银行卡的轮廓:

    // 梯度增强 , x 轴和 y 轴Mat grad_x, grad_y;Scharr(blur, grad_x, CV_32F, 1, 0);Scharr(blur, grad_y, CV_32F, 0, 1);Mat grad_abs_x, grad_abs_y;convertScaleAbs(grad_x, grad_abs_x);convertScaleAbs(grad_y, grad_abs_y);Mat grad;addWeighted(grad_abs_x, 0.5, grad_abs_y, 0.5, 0, grad);

轮廓发现是图像图形处理中最常见的一个操作,Opencv 到底提供了哪些轮廓检测的方法?其内部的实现原理是怎样的?为啥我在上面要用 Scharr ?下面我们就来做一个彻底的刨析。

Opencv 为我们提供了常用的四个方法 Sobel() Scharr() Laplacian() Canny() 用来处理边缘检测,当然还可以自定义卷积操作来实现,但这里我们先不做考虑。

1. Sobel 算子



Sobel算子如果光从核上面去看,根本什么都不知道,我们得去看他的原理。

他的原理就是利用导数求解边缘,我们知道像素差别大的时候那么它的切点越陡峭,那么这个时候就找到了边缘!Sobel 算子检测方法对灰度渐变和噪声较多的图像处理效果较好,但 Sobel 算子对边缘定位不是很准确,图像的边缘不止一个像素。

2. Scharr 算子

这个滤波是Sobel的升级版,原理是一样的,就是实现的近似代替不一样,说白了就事核改进了。

3. Laplacian 算子

拉普拉斯边缘检测是通过二阶倒数,从上面的一阶倒数的理解就不难发现二阶倒数是怎么进行的了。二阶倒数比一阶倒数的好处是在与受到周围的干扰小,其不具有方向性,操作容易,且对于很多方向的图像处理好。Laplacian 算子法对噪声比较敏感,所以很少用该算子检测边缘,而是用来判断边缘像素视为与图像的明区还是暗区。

4. Canny 算子

这是比较新的算法,运用的也是最广泛的。Canny的步骤是:

1.给一张图片,先进行滤波消除干扰,滤波之前已经说明。
2.计算梯度(进行 Sobel/Scharr 算子)
3.非极大值抑制。
4.滞后阈值。

非极大值抑制: 从字面上的理解就是从一群数据中找到真正的极大值,对于不是极大值的省略或者抑制显示。我们来想一下,Sobel算子计算的值就是边缘的值吗?算子是固定的,那就有很大的几率会计算到不是边缘的数据。计算的结果不会省略不好的点,也不会去加强好的点,所以显示就不明显。我们的目的就是改进上面两个点,对于第一个点,我们得比较那些计算的点进行比较,把不好点舍去。高等数学中有 “梯度” 的这个概念,就是数据下降或者上升最快的方向,简单的说就是求导切线的方向!

void Canny(InputArray image, // 输入OutputArray edges,// 输出double threshold1, // 低阈值double threshold2, // 高阈值int apertureSize = 3, // 卷积核大小bool L2gradient = false );// 采用何种方式做梯度合并

视频地址:https://pan.baidu.com/s/1BHGR6hcunmgS5m_NGK_x2Q
视频密码:dtvq

Android智能识别 - 银行卡区域裁剪(原理篇)相关推荐

  1. Android智能识别 - 银行卡区域裁剪

    在真正开始看这篇文章之前,希望我们能先去了解一下这篇文章<NDK开发前奏 - 实现支付宝人脸识别功能>,此篇文章阅读起来可能会有些许难度,因此我们只要能看懂 c/c++ 语法,能跟上我分析 ...

  2. Android自定义控件开发系列(零)——基础原理篇

    在后边的文章中发现在说Android自定义时,有时候要重复解释很多东西,所以想想返回来增加一篇"基础原理篇",直接进入正题吧-- 首先的问题是:在Android项目开发中,什么时候 ...

  3. android 图片识别白色区域进行裁剪_【研途技能贴】| 4款好用的图片处理软件推荐...

    要考研啦 4款好用的图片处理软件推荐 01 入门级作图神器--图怪兽 一款会打字就能用的在线编辑器,80万+模板任君挑选~无论是基础的旋转裁剪,还是难度进阶的抠图拼图,在这款软件里,你可以分分钟做出高 ...

  4. android智能识别技术,基于Android平台的OCR识别技术研究与实现

    摘要: 随着智能手机市场的迅猛发展和普及,Android成为所占市场份额最高的手机操作系统,与此同时,人们希望在手机终端享受更丰富舒适的应用功能.将OCR和Android智能终端相结合,依托光学字符识 ...

  5. android智能识别技术,一种基于Android的智能心音听诊与识别系统

    主权项: 1. 一种基于Android的智能心音听诊与识别系统,其特征在于:包含心音采集设备以及Android手机,心音采集硬件设备由驻极体话筒.30Hz到500Hz滤波器.主控制芯片.蓝牙芯片模组. ...

  6. Android Crash战斗日记(一、原理篇)

    前言 Crash估计是所有Android开发者的一块心病,无论是新手小白还是高手大牛,都无法避免遇到Crash.但是Crash是怎么产生的呢,这篇将深入的讲解Crash. 一.异常 说到Crash,得 ...

  7. Android指纹识别,看这一篇就够了

    在Android6.0(Api23)的时候,Android系统加入了指纹识别的api接口,即FingerprintManager,定义了最基础的指纹识别接口.不过,在AndroidP(Api28)的时 ...

  8. Android 实现书籍翻页效果----原理篇

    之前看到像ipad上的ibook的模拟书籍翻页的特效感觉很炫,在android上也有像laputa和ireader等应用实现有这个特效,在网上搜索了一下好像也没有现成的例子,所以自己动手实现了一个,现 ...

  9. Android卡顿掉帧问题分析之原理篇

    当用户抱怨手机在使用过程中存在卡顿问题的时候,会严重影响用户对手机品牌的好感和应用APP的体验,从而导致用户对手机品牌的忠诚度降低或应用APP的装机留存率下降.所以无论是手机设备厂商还是应用APP开发 ...

最新文章

  1. sql server xp_readerrorlog SQL语句查看错误日志
  2. Unity手游之路十自动寻路Navmesh之跳跃,攀爬,斜坡
  3. pyspark使用anaconda后spark-submit方法(本人对其他文章进行的补充)
  4. Xamarin.Android开发实践(六)
  5. 在 VSCode 中配置 PHP 开发环境
  6. Windows 如何利用注册表更改软件的窗口大小
  7. system进程占用资源高居不下
  8. 【云扩RPA】Excel-ReadingAndWriting
  9. GIF录制编辑工具(GifCam)
  10. android开发界面转换,Android开发Activity界面切换添加动画特效的方法
  11. Polar码快速入门
  12. Nodejs 中 request 出现 ‘socket hang up‘ 的解决办法
  13. C语言二叉树叶子节点的求法
  14. nyist oj nyoj 865
  15. K3s+Rainbond默认集群添加agent节点
  16. Github Page绑定至个人域名
  17. 「镁客早报」特斯拉推出租赁业务;美国FCC计划进行第三次5G频谱拍卖...
  18. Echarts图形化报表工具
  19. 高手常用的自我介绍套路
  20. 视觉机器学习之--决策树学习 方差意义 Cnm的意思

热门文章

  1. Python机器学习核PCA踩坑(numpy库与math库)
  2. 合作开发的软件著作权归谁
  3. 大多数开发人员都不知道的JSON.stringify 秘密
  4. Beta版本使用说明
  5. vCenter补丁升级
  6. 接口分析--腾讯软件中心应用信息接口
  7. 【渝粤题库】广东开放大学 手机软件开发APP 形成性考核 -
  8. linux 6新扩分区识别,虚拟机中CentOS 6.5 添加扩展分区
  9. Android 网络请求、网络状态及各种权限判断
  10. idea中的marketplace搜不到插件解决方法