openCV中KNN算法的实现

 更新时间:2025年04月14日 10:03:10   作者:2201_75491841  
KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

OpenCV 是一个开源的跨平台计算机视觉库,它提供了各种用于图像处理、计算机视觉任务的算法和工具,涵盖图像滤波、特征提取、目标检测、图像分割、视频分析等众多领域,广泛应用于计算机视觉相关的科研和工业项目中,可帮助开发者快速实现各种视觉处理功能。

KNN(K-最近邻)算法是一种简单且常用的分类算法。其核心思想是:如果一个样本在特征空间中的K个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别

KNN算法流程

  • 计算距离:使用向量之间的距离来衡量样本之间的相似度。常见的距离计算公式有欧式距离、曼哈顿距离等。

  • 升序排序:根据计算好的距离进行升序排序。

  • 取前K样本:选取距离最近的前K个样本。

  • 加权平均:根据距离对样本进行加权计算,距离越近,权重越高。

使用OpenCV实现KNN

以下是一张2000X1000像素的图片,包含5000个数字,我们将左边2500个数划分训练集,右边2500个数划分为测试集,构建模型训练结果

首先对图像进行切割并划分训练集和测试集

import numpy as np
import cv2

img=cv2.imread('digits.png')#读取名为 digits.png 的图像文件。
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将图像转换为灰度图

cells=[np.hsplit(row,100) for row in np.vsplit(gray,50)]#将图像垂直分割50行,水平分割100列
x=np.array(cells)
train=x[:,:50]#划分训练集
test=x[:,50:100]#划分测试集

#将数据展平并转换为浮点型
​train_new=train.reshape(-1,400).astype(np.float32)
test_new=test.reshape(-1,400).astype(np.float32)

创建标签并对模型进行训练

k=np.arange(10)#生成一个数组 [0, 1, 2, ..., 9]
labels=np.repeat(k,250)#将每个数字重复250次,生成标签数组,形状为 (2500,)
train_labels=labels[:,np.newaxis]#将标签数组转换为列向量,形状为 (2500, 1)
test_labels=np.repeat(k,250)[:,np.newaxis]

knn=cv2.ml.KNearest_create()#创建KNN模型
knn.train(train_new,cv2.ml.ROW_SAMPLE,train_labels)#使用训练数据和标签训练模型

测试模型,计算准确率

ret,result,neighbours,dist=knn.findNearest(test_new,k=3)#对测试数据进行预测,k=3 表示使用3个最近邻居。ret:是否成功执行。result:预测结果。neighbours:最近的邻居。dist:与邻居的距离。
print(ret,result,neighbours,dist)

#计算准确率
matches=result==test_labels
correct=np.count_nonzero(matches)
accuracy=correct*100.0/result.size
print("当前使用KNN识别手写数字的准确率为{}%。".format(accuracy))

最终代码输出得到以下结果

到此这篇关于openCV中KNN算法的实现的文章就介绍到这了,更多相关openCV KNN 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python设计模式之迭代器模式原理与用法实例分析

    Python设计模式之迭代器模式原理与用法实例分析

    这篇文章主要介绍了Python设计模式之迭代器模式原理与用法,结合具体实例形式分析了迭代器模式的概念、原理、定义及使用方法,代码注释说明简单易懂,需要的朋友可以参考下
    2019-01-01
  • Python实现简单字典树的方法

    Python实现简单字典树的方法

    这篇文章主要介绍了Python实现简单字典树的方法,实例分析了Python字典树的定义、实现与使用技巧,需要的朋友可以参考下
    2016-04-04
  • 一小时学会TensorFlow2之全连接层

    一小时学会TensorFlow2之全连接层

    这篇文章主要介绍了TensorFlow2之全连接层,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 在Django中实现添加user到group并查看

    在Django中实现添加user到group并查看

    今天小编就为大家分享一篇在Django中实现添加user到group并查看,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 浅谈Python爬虫原理与数据抓取

    浅谈Python爬虫原理与数据抓取

    这篇文章主要介绍了浅谈爬虫原理与数据抓取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Python3爬虫中Splash的知识总结

    Python3爬虫中Splash的知识总结

    在本篇文章里小编给大家整理的是关于Python3爬虫中Splash的知识总结内容,需要的朋友们可以学习参考下。
    2020-07-07
  • Python中用字符串调用函数或方法示例代码

    Python中用字符串调用函数或方法示例代码

    字符串作为python中常用的数据类型,掌握字符串的常用方法十分必要。下面这篇文章主要给大家介绍了关于Python中通过字符串调用函数或方法的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • python Gooey库将命令行程序转换成图形用户界面GUI应用

    python Gooey库将命令行程序转换成图形用户界面GUI应用

    这篇文章主要为大家介绍了python Gooey库将命令行程序转换成图形用户界面GUI应用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • python3.5基于TCP实现文件传输

    python3.5基于TCP实现文件传输

    这篇文章主要为大家详细介绍了python3.5基于TCP实现文件传输的代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • python人工智能tensorflow函数tensorboard使用方法

    python人工智能tensorflow函数tensorboard使用方法

    这篇文章主要为大家介绍了python人工智能tensorflow函数tensorboard使用方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论