使用 OpenCV 和 Python 识别信用卡号

image = imutils.resize(image, width=300)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

加载了包含信用卡照片的命令行参数图像。 然后,我们将其调整为 width=300 ,保持纵横比,然后将其转换为灰度。 让我们看看我们的输入图像:

image-20211110093318276

接下来是我们的调整大小和灰度操作:

image-20211110093311324

现在我们的图像已经灰度化并且大小一致,让我们进行形态学操作:

apply a tophat (whitehat) morphological operator to find light

regions against a dark background (i.e., the credit card numbers)

tophat = cv2.morphologyEx(gray, cv2.MORPH_TOPHAT, rectKernel)

使用我们的 rectKernel 和我们的灰度图像,我们执行 Top-hat 形态学操作,将结果存储为 tophat。

Top-hat操作在深色背景(即信用卡号)下显示浅色区域,如下图所示:

image-20211110093303572

给定我们的高帽图像,让我们计算沿 x 方向的梯度:

compute the Scharr gradient of the tophat image, then scale

the rest back into the range [0, 255]

gradX = cv2.Sobel(tophat, ddepth=cv2.CV_32F, dx=1, dy=0,

ksize=-1)

gradX = np.absolute(gradX)

(minVal, maxVal) = (np.min(gradX), np.max(gradX))

gradX = (255 * ((gradX - minVal) / (maxVal - minVal)))

gradX = gradX.astype(“uint8”)

我们努力隔离数字的下一步是计算 x 方向上高帽图像的 Scharr 梯度。完成计算,将结果存储为 gradX 。

在计算 gradX 数组中每个元素的绝对值后,我们采取一些步骤将值缩放到 [0-255] 范围内(因为图像当前是浮点数据类型)。 为此,我们计算 gradX 的 minVal 和 maxVal,然后计算第 73 行所示的缩放方程(即最小/最大归一化)。 最后一步是将 gradX 转换为范围为 [0-255] 的 uint8。 结果如下图所示:

image-20211110093254678

让我们继续改进信用卡数字查找算法:

apply a closing operation using the rectangular kernel to help

cloes gaps in between credit card number digits, then apply

Otsu’s thresholding method to binarize the image

gradX = cv2.morphologyEx(gradX, cv2.MORPH_CLOSE, rectKernel)

thresh = cv2.threshold(gradX, 0, 255,

cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]

apply a second closing operation to the binary image, again

to help close gaps between credit card number regions

thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, sqKernel)

为了缩小差距,我们执行

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值