opencv第十章 机器学习和深度学习

机器学习和深度学习

机器学习是人工智能的核心,专门研究如何让计算机模拟和学习人类的行为。
深度学习是机器学习中的一个热门研究方向,它主要研究样本数据的内在规律和表示层次,让计算机能够让人一样具有分析与学习能力。

机器学习

kNN算法

kNN算法将找出k个距离最近的邻居作为目标的 同一类别

图解kNN算法

使用OpenCV的ml模块中的kNN算法的基本步骤如下。
(1)调用cv2.mL.KNearest_ create()函数创建kNN分类器。
(2)将训练数据和标志作为输入,调用kNN分类器的train()方法训练模型。
(3)将待分类数据作为输入,调用kNN分类器的findNearest()方法找出K个最近邻居,返回
分类结果的相关信息。
下面的代码在图像中随机选择20个点,为每个点随机分配标志( 0或1 );图像中用矩形表示
标志0,用三角形表示标志1;再随机新增一个点,用kNN算法找出其邻居,并确定其标志(即完
成分类)。

import cv2
import numpy as np
import matplotlib.pyplot as plt
points = np. random. randint(0,100, (20,2))                        #随机选择20个点
labels = np. random. randint(0,2,(20,1))                           #为随机点随机分配标志
label0s = points[labels.ravel()==0]                                #分出标志为0的点
plt. scatter(label0s[:,0],label0s[:,1],80,'b','s')                 #将标志为0的点绘制为蓝色矩形
label1s = points[labels.ravel()==1]                                #分出标志为1的点
plt. scatter(label1s[:,0],label1s[:,1],80,'r','^')                 #将标志为1的点绘制为红色三角形
newpoint = np.random.randint(0,100,(1,2))                          #随机选择一个点,下面确定其分类
plt.scatter(newpoint[:,0],newpoint[:,1],80,'g','o')                #将待分类新点绘制为绿色圆点
plt.show()                                                         #进一步使用kNN算法确认待分类新点的类别、3个最近邻居和距离
knn = cv2.ml.KNearest_create()                                     #创建kNN分类器
knn.train(points.astype(np.float32).cv2.ml.ROW_SAMPLE,labels.astype(np. float32))  #训练模型
ret,results,neighbours,dist = knn.findNearest(newpoint.astype(np.float32), 3)      #找出3个最近邻居
print("新点标志: %s" % results)
print("邻居: %s" % neighbours)
print("距离: %s" % dist)

在这里插入图片描述

新点标志: [[1.]]
邻居: [[0. 1. 1.]]
距离: [[ 80. 296. 424.]]

因为三个最近邻居有两个是红色三角,所以他的标志为一

用kNN算法实现手写数字识别

用下列图片用来训练。
先把下面分割为每个数字大小都是20*20的图像,用于训练模型。
然后将手写的数字进行反二值化阈值处理转换成黑白图像,用像素值作为特征向量进行测试
在这里插入图片描述

import cv2
import numpy as np
import matplotlib.pyplot as plt
gray = cv2. imread('img/a.png',0)     #读入手写数字的灰度图像
digits = [np.hsplit(r,100) for r in np.vsplit(gray,50)]    #分解数字: 50行、100 列
np_digits = np.array(digits )      #转换为NumPy数组
#准备训练数据,转换为二维数组,每个图像400个像素
train_data = np_digits.reshape(-1, 400). astype(np. float32)
train_labels = np.repeat(np. arange(10),500)[:,np.newaxis]    #定义标志
knn = cv2.ml.KNearest_create()             #创建kNN分类器
knn.train(train_data, cv2.ml.ROW_SAMPLE,train_labels)     #训练模型
#用绘图工具创建的手写数字5图像(大小为20x 20 )进行测试
test= cv2.imread('img/a5.png',0)        #打开图像
test_data=test.reshape(1,400).astype(np.float32)     #转换为测试数据
ret,result
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值