OpenCV-Android平台应用实战 - 银行卡卡号识别(05、寻找与发现银行卡区域)

思路

建议:为了更好的发现梯度之间的差异,尽量在 RGB色彩空间寻找梯度。然后对RGB空间寻找到的梯度,可以取RGB三个通道中最大值的梯度差,作为那一个像素点的梯度。同时,也可以直接用求取出来的梯度图像进行灰度化,再进行梯度二值化。(简而言之:先在RGB空间求梯度,然后灰度化,然后二值化)
对比:为什么不先转灰度,再求梯度呢?
理由:先求梯度,可以最大限度的保留各个通道值间的差异。更能反映出图像本来梯度的分布。若先转灰度,则在变成灰度图像的过程中OpenCV默认采取的算法会基于一个权重的考虑(一般对绿色比较敏感,也就是说对红色或者绿色权重不一样)。这样也就是说 权重和梯度稍微有一定的差异。这些细微的差异可能对后面的 轮廓发现、过滤 等操作造成影响。

  • 第一步:图像梯度(色差)求取
    用Scharr算子求取梯度(建议用Scharr算子,而不是Sobel算子。原因:Scharr算子对边缘提取效果比Sobel算子强。且Sobel算子容易受到一些其他的外来因素干扰。详细可以参考 OpenCV-图像处理(17、Sobel算子))

  • 第二步:梯度二值化(相关知识点,可以参考:

你可能感兴趣的:(OpenCV,Android,银行卡号识别,寻找与发现银行卡区域)