OpenCV之K近邻算法(信用卡数字识别)

本文介绍了OpenCV中的K近邻算法,用于信用卡数字识别。首先阐述了K近邻算法的基本原理,然后详细讲解了使用该算法的步骤,包括引入库、读入数据、操作步骤、显示结果和结果展示。通过实例展示了如何利用OpenCV进行机器学习分类。


前言

案例 Fu Xianjun. All Rights Reserved.
随着当今世界的发展,计算机视觉技术的应用越来越广泛。伴随着硬件设备的不断升级,构造复杂的计算机视觉应用变得越来越容易了。OpenCV像是一个黑盒,让我们专注于视觉应用的开发,而不必过多的关注基础图象处理的具体细节。

一、K近邻算法是什么?

K近邻算法的本质是将指定对象根据已知特征值分类。
机器学习算法是从数据中产生模型,我们把经验提供给算法,他就能够根据经验产生模型,在训练过程中所使用的数据称为训练数据,其中的每个样本称为训练样本,集合称为训练集合。

二、使用步骤:

原图展示:
在这里插入图片描述
在这里插入图片描述

1.引入库

import cv2
import numpy as np

2.读入数据

def sort_contours(cnts, method = "left-to-right"):
# 定义一个函数,对轮廓进行排序,从左到右
    reverse = False
    i = 0
    if method == "left-to-right" or method == "bottom-to-top":
        #底部到顶部
        reverse = True
    if method == "top-to-bottom" or method == "bottom-to-top":
        i = 1
    boundingBoxes = [cv2.boundingRect(cnt) for cnt in cnts]
    (cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),\
                                       key = lambda b: b[1][i],\
                                        reverse = reverse))
    return cnts,boundingBoxes# 打包
def cv_show(name,img):# 定义一个函数
    cv2.imshow(name,img) # 显示图像
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
template = cv2.imread("ocr_a_reference.png")# 读取模板
# cv_show("template",template)
template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
# 色彩空间转换,转换为灰度图
# cv_show("template_gray",template_gray)
ret, template_binary = cv2.threshold(template_gray,127,255,1)
# 二值化
cv_show("template_binary",template_binary)

3.操作步骤

cnts, he = cv2.findContours(template_binary, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
# 查找外轮廓
template_rect = cv2.drawContours(template, cnts, -1,(0,0,255),2)
# 绘制轮廓
# cv_show("template_rect",template_rect)
cnts = sort_contours(cnts)[0]
number = {}

for (i,cnt) in enumerate(cnts):
    (x,y,w,h) = cv2.boundingRect(cnt)
    roi = template_rect[y:y+h, x:x+w]
    roi = cv2.resize(roi, (57,88))
    number[i] = roi
   
cv_show(f"number1",number[3])

4.显示结果

cardImg = cv2.imread('credit_card_01.png')
cardImg = cv2.resize(cardImg, \
                    (300, int(float(300) / cardImg.shape[1]*cardImg.shape[0])),\
                    interpolation=cv2.INTER_AREA)
# cv_show('cardImg',cardImg)

cardImg_gray = cv2.cvtColor(cardImg, cv2.COLOR_BGR2GRAY)
cv_show('cardImg_gray', cardImg_gray)

rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))
sqKernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))

cardImg_tophat = cv2.morphologyEx(cardImg_gray, cv2.MORPH_TOPHAT, rectKernel)
cv_show('cardImg_tophat',cardImg_tophat)

5.结果展示

在这里插入图片描述
在这里插入图片描述

三、总结

这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了OpenCV的K近邻算法的使用,而数字图像处理提供了大量能使我们快速便捷地处理数据的函数和方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值