it编程 > 软件设计 > 算法

openCV中KNN算法的实现

35人参与 2025-04-14 算法

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

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

knn算法流程

使用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 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

OpenCV图像形态学的实现

04-14

nginx中调度算法的五种实现

03-18

京东有实体店吗?位置在哪里?

10-17

ss天赋在哪个游戏?如何搭配?

10-11

淘宝推荐算法是怎样的?如何提高商品曝光率?

10-09

【pygame实现星露谷物语风格游戏】9.绘制地图中的其他事物,并且打造伪3D效果

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论