python基于opencv的银行卡数字识别

python基于opencv实现银行卡数字的识别

import cv2 as cv
import numpy as np


def cv_show(title, image):
    cv.imshow(title, image)
    cv.waitKey(0)
    cv.destroyAllWindows()


# 读取图片
num_img = cv.imread('./images/0-1.png')
# 转灰度
num_img_gray = cv.cvtColor(num_img, cv.COLOR_BGR2GRAY)
# 预值处理
ret, thresh = cv.threshold(num_img_gray, 127, 255, cv.THRESH_BINARY_INV)
# 边缘检测
contours, hierarchy = cv.findContours(thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
MaxRect = []
for cts in contours:
    MaxRect.append(cv.boundingRect(cts))

cts, MaxRect = zip(*sorted(zip(contours, MaxRect), key=lambda x: x[1][0], reverse=False))
dect_roi = {}
for i, maxrect in enumerate(MaxRect):
    x, y, w, h = maxrect
    roi = thresh[y:(y + h), x:(x + w)]
    roi = cv.resize(roi, (57, 88))
    dect_roi[i] = roi

# 最佳阈值?
card_img = cv.imread('./images/card.png')
h, w = card_img.shape[:2]
r = 320 / w
card_img = cv.resize(card_img, (320, int(h * r)))
card_img_gray = cv.cvtColor(card_img, cv.COLOR_BGR2GRAY)
# 礼帽
kernel = cv.getStructuringElement(cv.MORPH_RECT, (9, 3))
top = cv.MORPH_TOPHAT
img_top = cv.morphologyEx(card_img_gray, top, kernel, iterations=3)
# 5.边缘检测
# 水平方向
sobel_x = cv.Sobel(img_top, ddepth=cv.CV_64F, dx=1, dy=0, ksize=5)
sobel_x = np.absolute(sobel_x)
(max_val, min_val) = (np.max(sobel_x), np.min(sobel_x))
sobel_x = ((sobel_x - min_val) / (max_val - min_val)) * 255
# 垂直方向
sobel_y = cv.Sobel(img_top, ddepth=cv.CV_64F, dx=0, dy=1, ksize=5)
sobel_y = np.absolute(sobel_y)
(max_val, min_val) = (np.max(sobel_y), np.min(sobel_y))
sobel_y = ((sobel_y - min_val) / (max_val - min_val)) * 255
sobel = (sobel_x + sobel_y).astype('uint8')
# 6.闭运算
img_close = cv.morphologyEx(sobel, cv.MORPH_CLOSE, kernel=kernel, iterations=2)
# 7.明亮(阈值)
thresh_index, thresh_img = cv.threshold(img_close, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
# 7.2.膨胀
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
img_dilate = cv.morphologyEx(thresh_img, cv.MORPH_DILATE, kernel=kernel, iterations=2)
# cv_show('dilate', img_dilate)
# 8.指定特定区域[选择出来-->排序 4000一组]
img_copy = card_img.copy()
card_contours, card_cts = cv.findContours(img_dilate, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
MinBox_MaxRect = []
for cts in card_contours:
    x, y, w, h = cv.boundingRect(cts)
    if (55 < w < 70) and (15 < h < 30):

        MinBox_MaxRect.append(cv.boundingRect(cts))
Locs = sorted(MinBox_MaxRect, key=lambda x: x[0])
# 遍历每一个轮廓中的数字
output = []
for (i, (gX, gY, gW, gH)) in enumerate(Locs):
    groupOutput = []
    # 根据坐标提取每一个组
    group = card_img_gray[gY - 3:gY + gH + 3, gX - 3:gX + gW + 3]
    # # 预处理
    group = cv.threshold(group, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)[1]
    # # 计算每一组的轮廓
    digitCts, hierarchy = cv.findContours(group, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
    group_rect = []
    for c in digitCts:
        group_rect.append(cv.boundingRect(c))
        group_rect = sorted(group_rect, key=lambda x: x[0])
    for r in group_rect:
        (x, y, w, h) = r
        roi = group[y:y + h, x:x + w]
        roi = cv.resize(roi, (57, 88))

        scores = []
        for (digit, digitROI) in dect_roi.items():
            # 模板匹配
            result = cv.matchTemplate(roi, digitROI, cv.TM_CCOEFF)
            (_, score, _, _) = cv.minMaxLoc(result)
            scores.append(score)
        groupOutput.append(str(np.argmax(scores)))

    output.append(groupOutput)
    cv.rectangle(img_copy, (gX - 3, gY - 3), (gX + gW + 3, gY + gH + 3), (0, 0, 255), 2)
    cv.putText(img_copy, "".join(groupOutput), (gX, gY - 15), cv.FONT_HERSHEY_SIMPLEX, 0.65, (0, 0, 255), 2)
cv_show('copy', img_copy)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机视觉(Computer Vision)又称为机器视觉(Machine Vision),顾名思义是一门“教”会计算机如何去“看”世界的学科。在机器学习大热的前景之下,计算机视觉与自然语言处理(Natural Language Process, NLP)及语音识别(Speech Recognition)并列为机器学习方向的三大热点方向。在如今互联网时代,人工智能发展迅速,计算机视觉领域应用非常广泛,对人才的需求也是非常大,计算机视觉在IT领域的工资水平非常高,初级就能达到一个很好的薪资水平,学好计算机视觉,势在必得,增加自己的竞争力以及给自己一个好的薪水。 以下是计算机视觉部分应用场景,可以看到它的需求非常大:1.Google, MS, Facebook, Apple,华为,阿里,腾讯,百度等世界科技公司,无一没有建立自己的AI实验室,AI里面,计算机视觉或图像处理是非常重要的一块,当然它们研究方向就多了,几乎会涵盖所有方向。2.世界各大汽车公司,如特斯拉,宝马。汽车公司开始发力自动驾驶,而自动驾驶里面最核心的技术就是“教”汽车里的电脑如何通过摄像头实时产生的图片和视频自动驾驶。因此视觉和图像处理便是核心技术所在,如行人探测,道路识别,模式识别。3.Adobe,美图秀秀等照片、Winrar、Real player等视频处理、压缩软件。这个不多说,最最直观的应用,比如降噪,图像分割、图像压缩、视频压缩。4.AR(增强现实)最近由于Pockman GO的风靡全球又被推到第一线,而Google Class或者三星Gear眼镜等等,也无不和图像处理计算机视觉的科研有关。预测这将是未来几年主推的东西。5.迪士尼等各大电影制片公司。3-D电影,以及各种炫酷的电影特效,当然里面不光有图像处理,还有计算机图形学的东西在里面。6.地平线,大疆无人机等机器人公司。和自动驾驶一个道理,机器人要通过摄像头“判断”并躲开前方障碍物,核心技术都在视觉和图像处理。7.医疗器械设备公司。医学图像处理,核磁共振,断层扫描等等,众所周知医疗行业都是暴利阿。8.工业级摄像头;包括高速路上的摄像头,机场火车站安检摄像头,工业流水线上的摄像头,嵌入了人脸或次品识别的芯片,智能地识别罪犯、次品,等等。 基于SpringBoot+Python多语言银行卡识别系统,将以基础知识为根基,带大家完成一个强大的银行卡识别系统。该系统将包含算法部分,算法服务,算法商业化api部分等。应用场景可以为:帮助用户快速完成信息录入和银行卡绑定、批量快速录入银行卡号的业务场景、商场购物现场扫码app绑定银行卡等等,算法可以商业化,系统同时实现了商业化api功能,商业价值非常高,大家可以基于课程项目的基础上进一步完善,做到商用,学到知识的同时,给自己额外增加收入。 本课程包含的技术: 开发工具为:IDEA、WebStorm、PyCharmPythonAnconaOpencvDjangoSpringBootSpringCloudVue+ElementUI+NODEJS等等 课程亮点: 1.与企业接轨、真实工业界产品2.强大的计算机视觉OPENCV3.从基础到案例,逐层深入,学完即用4.市场主流的前后端分离架构和人工智能应用结合开发5.多语言结合开发,满足多元化的需求6.商业化算法api实现7.多Python环境切换8.微服务SpringBoot9.集成SpringCloud实现统一整合方案 10.全程代码实操,提供全部代码和资料 11.提供答疑和提供企业技术方案咨询 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值