当前位置: 首页 > news >正文

KNN 图像识别

KNN(K-Nearest Neighbors,K最近邻)算法是一种简单而有效的分类算法,也可以用于图像识别。它的基本思想是通过计算样本之间的距离,将待分类的样本归为其在训练集中最相近的K个样本所属的类别中最常见的类别

1. 准备工作

2. 图像预处理

3. 数据处理与分割

4. 标签准备

5. 训练与测试KNN模型

6.检验测试结果:

7.我们可以输入自己的一些例子再来测试训练的如何。


1. 准备工作

首先,我们需要一个图像数据集。

以此图像为例

该图像应当包含一个50x100的网格,每个单元格中包含一个手写数字(0-9),所以总共有5000个数字样本如何将数据样本提取出来呢。

2. 图像预处理

我们将图像加载为灰度图像并进行分割:

import numpy as np
import cv2img = cv2.imread('图片位置')#读取图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #图像灰度化cells = [np.hsplit(row, 100) for row in np.vsplit(gray, 50)]
# 将图像分割成50x100的网格

我们使用np.vsplit将图像按行分割成50个部分,然后对每个部分使用np.hsplit按列分割成100个单元格。这样,我们得到了一个包含5000个单元格的数组,每个单元格中包含一个手写数字的图像。在调试过程中可以看到已经分割成功

我们可以查看是如何保存的

3. 数据处理与分割

接下来,我们将图像数据整理成训练和测试数据:

x = np.array(cells)
train = x[:, :50]
test = x[:, 50:100]# 将图像数据展平以适应KNN输入
train_new = train.reshape(-1, 400).astype(np.float32)
test_new = test.reshape(-1, 400).astype(np.float32)

这里,我们将每个数字图像展平成一个400维的向量(20x20的图像)。这些展平的向量作为KNN算法的输入特征

4. 标签准备

我们需要准备训练和测试标签,以便模型可以学习和评估:

k = np.arange(10)
labels = np.repeat(k, 250)
train_labels = labels[:, np.newaxis]
test_labels = np.repeat(k, 250)[:, np.newaxis]

在这里,np.repeat(k, 250)生成了每个数字(0-9)出现250次的标签数组。每个训练和测试样本都有对应的标签。

5. 训练与测试KNN模型

我们使用OpenCV的KNN算法来训练和测试我们的模型:

knn = cv2.ml.KNearest_create()#创建训练
knn.train(train_new, cv2.ml.ROW_SAMPLE, train_labels)#进行训练
ret, result, neighbours, dist = knn.findNearest(test_new, k=5)#设置k值

在这段代码中,我们创建了一个KNN模型,并用训练数据进行训练。之后,使用findNearest方法来对测试数据进行预测

6.检验测试结果:
print(result2)
matches = result == test_labels
correct = np.count_nonzero(matches)
accuracy = correct * 100.0 / result.size
print(accuracy)

通过对比预测结果与实际标签,我们可以计算模型的准确率。准确率表示模型正确分类的测试样本占总测试样本的比例

7.我们可以输入自己的一些例子再来测试训练的如何。

我们输入的图片格式要和训练数据的图片大小相同

img2 = cv2.imread('你的图片位置')#读取图片
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)#图像灰度化x2 = np.array(gray2)#只输入一个数据,所以可以直接处理
test2 =x2[:,:]
test2_new = test2.reshape(-1,400).astype(np.float32)ret2, result2, neighbours2, dist2 = knn.findNearest(test2_new, k=5)#设置k值进行预测
print(result2)#输出结果

全代码

import numpy as np
import cv2img = cv2.imread('图片位置')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img2 = cv2.imread('你的图片位置')
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)cells = [np.hsplit(row, 100) for row in np.vsplit(gray, 50)]x = np.array(cells)
x2 = np.array(gray2)train = x[:, :50]
test = x[:, 50:100]
test2 =x2[:,:]train_new = train.reshape(-1, 400).astype(np.float32)
test_new = test.reshape(-1, 400).astype(np.float32)
test2_new = test2.reshape(-1,400).astype(np.float32)k = np.arange(10)
labels = np.repeat(k, 250)train_labels = labels[:, np.newaxis]
test_labels = np.repeat(k, 250)[:, np.newaxis]knn = cv2.ml.KNearest_create()
knn.train(train_new, cv2.ml.ROW_SAMPLE, train_labels)
ret, result, neighbours, dist = knn.findNearest(test_new, k=5)
ret2, result2, neighbours2, dist2 = knn.findNearest(test2_new, k=11)print(result2)
matches = result == test_labels
correct = np.count_nonzero(matches)
accuracy = correct * 100.0 / result.size
print(accuracy)

我们可以设置不同的k值来是预测结果更加精确

总结

通过以上步骤,我们使用OpenCV和KNN算法实现了一个简单的手写数字识别系统。尽管这个示例相对简单,但它展示了如何从数据预处理、模型训练到性能评估的完整流程。在实际应用中,我们可以进一步优化模型,尝试更多先进的算法,或使用更复杂的数据集以提升性能。

相关文章:

KNN 图像识别

KNN(K-Nearest Neighbors,K最近邻)算法是一种简单而有效的分类算法,也可以用于图像识别。它的基本思想是通过计算样本之间的距离,将待分类的样本归为其在训练集中最相近的K个样本所属的类别中最常见的类别 1. 准备工作…...

基于STM32和云平台的花卉养护系统设计(微信小程序)(209)

文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】选题背景【6】国内外技术发展现状1.4 开发工具的…...

编程语言进化史

编程语言多到你想象不到。 图片来自: 程序设计语言概念 发展历史 自从1946年冯诺依曼原理被提出,计算机数据和指令是通过二进制形式以及后来的汇编语言(二进制助记符),但依然没有改变容易出错的本质。1951年Rutishauser提出的用编译程序实现高级语言的思…...

vuex的原理和使用方法

简介 Vuex 是 Vue.js 应用的状态管理模式,它为应用内的所有组件提供集中式的状态(数据)管理。可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。 Vuex的构成 state:state 是 Vuex 的数据中心,也就是说state是用来…...

(javaweb)SpringBootWeb案例(毕业设计)案例--文件上传

1.简介 前端程序和服务端程序 对于前端 html文件放在static目录下 location---文件提交的位置 右键--copy value -------------c盘目录下 2.本地上传--文件存储 1. 2. 使用uuid:保证文件名是唯一的 此时 并没有文件的拓展名--所以需要---写后缀 用字符串截取 此时图…...

数据库之存储过程和函数

目录 一、存储过程和函数概述 二、创建并调用存储过程和函数 1.创建存储过程 2.创建存储函数 3.调用存储过程和函数 三、关于存储过程和函数的表达式 1.变量 1.变量的分类 2.在存储过程和函数中应用变量 2.定义条件和处理程序 1.定义条件 2.定义处理程序 3.游标的…...

《SPSS零基础入门教程》学习笔记——02.数据管理

文章目录 2.1 连续变量的离散化2.2 自动重编码、编秩与数值计数2.3 几个常用过程2.4 多个数据文件的操作2.5 数据字典2.6 数据核查(1)数据验证模块(2)数据检验 2.7 数据准备 计算新变量(转换 -> 计算变量&#xff0…...

嵌入式软件的一些常用调试测试方法

嵌入式软件的仿真调试测试是确保软件质量和功能正确性的关键步骤。以下是几种常见的仿真调试测试方式: 1.集成开发环境(IDE)调试: 使用IDE(如IAR EWARM、Keil MDK、Eclipse等)内置的调试器进行断点设置、单…...

Android T about screen rotation(二)

需求:客户因为模具问题,屏幕方向需要动态的变动.(方向: 0 , 90 , 180 ,270) 拆分:设备开机过程中图像显示可分为三个阶段,boot logo(1)->kernel logo(2),这一段的处理需要驱动层,所以暂时忽略. 开机动画 Bootanimation(3)阶段 和 Home Launcher应用显示(4)阶段是需要修改的…...

qt反射之类反射、方法反射、字段反射

话不多说&#xff0c;直接上代码&#xff1a; main.cpp: #include < QCoreApplication > #include “fstudent.h” #include “manage.h” int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //注册类型 qRegisterMetaType(“FStudent”); Manage m…...

服务器数据恢复—raid5阵列离线硬盘强制上线失败如何恢复数据?

服务器数据恢复环境&#xff1a; 某品牌2850服务器上有一组由6块SCSI硬盘组建的raid5磁盘阵列&#xff0c;上层操作系统为Redhat linuxext3文件系统。 服务器故障&初检&#xff1a; 服务器在运行过程中突然瘫痪&#xff0c;管理员对服务器中的raid进行检查后发现有两块硬盘…...

FastAPI+Vue3零基础开发ERP系统项目实战课 20240815上课笔记 列表和字典相关方法的学习和练习

昨日回顾 1、大小写转换2、去除空格3、判断是否为数字4、前缀后缀 昨日练习题进度 练习&#xff1a;判断验证码是否正确 1、生成一个由四个字符组成的验证码字符串&#xff0c;要求有大写有小写&#xff0c;要求左右两边有空格2、打印到控制台3、让用户输入这个验证码&…...

基于微信小程序的诗词智能学习系统的设计与实现(全网独一无二,24年最新定做)

文章目录 前言&#xff1a; 博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为…...

httplib库:用C++11搭建轻量级HTTP服务器

目录 引言 一. httplib库概述 二. httplib核心组件 2.1 数据结构 2.2 类和函数 2.3 服务器搭建 ​编辑 结语 引言 在现代软件开发中&#xff0c;HTTP服务是网络应用的基础。对于需要快速搭建HTTP服务器或客户端的场景&#xff0c;使用成熟的第三方库可以极大提高开发效…...

基于嵌入式C++、SQLite、MQTT、Modbus和Web技术的工业物联网网关:从边缘计算到云端集成的全栈解决方案设计与实现

一、项目概述 1.1 项目目标与用途 随着工业4.0时代的到来&#xff0c;传统工业设备与现代信息技术的结合越来越紧密。物联网工业网关作为连接工业设备与云端平台的桥梁&#xff0c;在工业自动化、设备监控、远程运维等方面发挥着至关重要的作用。本项目旨在设计并实现一个能够…...

Chapter 38 设计模式

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、单例模式二、工厂模式 前言 在软件开发中&#xff0c;设计模式提供了一种可重用的解决方案&#xff0c;以应对在特定环境中反复出现的问题。这些模式是基于经验总结…...

Redis5主备安装-Redis

本次Redis有两台服务器及3个独立IP&#xff1a;主服务器的ip地址是192.168.31.190&#xff0c;从服务器的IP地址是192.168.31.191&#xff0c;vipIP地址是192.168.31.216 主备方案承载Redis最大的好处是无需考虑Redis崩后无法访问。 前提是需要优先安装keepalived&#xff0c;…...

C++票据查验、票据ocr、文字识别

现在&#xff0c;80、90后的人们逐渐过渡为职场上的主力人员&#xff0c;在工作中当然也会碰到各种各样的问题。比如&#xff0c;当你的老板给你一个艰难的任务时&#xff0c;肯定是不能直接拒绝的。那么我们该怎么做呢&#xff1f;翔云建议您先认真考虑老板说的任务的难度&…...

pytest.ini介绍

1.pytest.ini是什么 &#xff1f; pytest.ini文件是pytest的主配置文件&#xff1b;pytest.ini文件的位置一般放在项目的根目录下&#xff0c;不能随便放&#xff0c;也不能更改名字。在pytest.ini文件中都是存放的一些配置选项 &#xff0c;这些选项都可以通过pytest -h查看到…...

Vue项目打包成桌面应用

Vue项目打包成桌面应用 一、使用 NW.js 打包 NW.js基于Chromium和Node.js。它允许您直接从浏览器调用Node.js代码和模块&#xff0c;并在应用程序中使用Web技术。此外&#xff0c;您可以轻松地将web应用程序打包为本机应用程序。 NW官网...

2026年AI论文工具实测排行,哪款真正适合顺利通关?

2026 年学术 AI 论文工具已形成全流程、理工 / 社科、英文 / 中文、免费 / 付费的清晰分化。综合实测排行与场景适配&#xff0c;千笔AI 是中文全能首选&#xff0c;DeepSeek 学术版是理工开源首选&#xff0c;毕业之家是国内毕业专属首选。 一、2026 年实测排行 TOP5&#xff…...

技术人的职业规划:打造成功的职业生涯

技术人的职业规划&#xff1a;打造成功的职业生涯 引言 作为一名技术人&#xff0c;职业规划是实现职业目标的关键。在快速变化的技术领域&#xff0c;一个清晰的职业规划可以帮助我们明确方向&#xff0c;抓住机会&#xff0c;实现个人价值。 回顾我的职业历程&#xff0c;从一…...

通过Taotoken CLI工具一键配置团队开发环境与统一模型调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken CLI工具一键配置团队开发环境与统一模型调用 在团队协作开发中&#xff0c;统一管理大模型API的接入配置是一项常见且…...

告别笔记本续航焦虑:手把手教你用NVMe电源管理给SSD“降频省电”

告别笔记本续航焦虑&#xff1a;手把手教你用NVMe电源管理给SSD“降频省电”每次带着笔记本出差&#xff0c;最担心的就是电量撑不过一场会议。你可能已经关闭了背光键盘、调低了屏幕亮度&#xff0c;甚至忍痛停用了独显&#xff0c;但续航依然捉襟见肘。其实&#xff0c;有一个…...

DeepSeek长上下文能力解密(官方未公开的context-aware attention调度机制)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek长上下文能力解密&#xff08;官方未公开的context-aware attention调度机制&#xff09; DeepSeek系列模型在128K token上下文场景中展现出远超同规模模型的稳定性与推理一致性&#xff0c;其核心并…...

明日方舟桌宠Ark-Pets显卡优化配置指南:3步实现流畅桌面动画

明日方舟桌宠Ark-Pets显卡优化配置指南&#xff1a;3步实现流畅桌面动画 【免费下载链接】Ark-Pets Arknights Desktop Pets | 明日方舟桌宠 (ArkPets) 项目地址: https://gitcode.com/gh_mirrors/ar/Ark-Pets Ark-Pets是一款基于《明日方舟》角色模型的桌面宠物软件&am…...

从 ROI 看:什么时候只用单 Agent 更优

从 ROI 看&#xff1a;什么时候只用单 Agent 更优一、 引言 (Introduction) 1.1 钩子 (The Hook) 你有没有见过这样的项目场景&#xff1f; 场景1&#xff1a;创业公司MVP阶段 小团队只有2个算法工程师、1个全栈&#xff0c;预算只有30万/月的云服务和人力折算&#xff08;算法…...

从岭回归到Lasso:正则化原理、稀疏性与ADMM算法实践

1. 项目概述&#xff1a;从岭回归到Lasso的深度解析在机器学习和统计建模的实践中&#xff0c;我们常常面临一个核心矛盾&#xff1a;模型在训练数据上表现优异&#xff0c;但在未见过的数据上却一塌糊涂&#xff0c;这就是所谓的“过拟合”。想象一下&#xff0c;你为了记住一…...

配额额度只剩2.3%,而审批流程还要3天?用DeepSeek配额弹性池+预授权令牌实现零等待扩容(附实测TPS提升41%)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek配额管理的核心挑战与业务痛点 DeepSeek大模型服务在企业级落地过程中&#xff0c;配额管理已成为影响稳定性、成本可控性与多租户公平性的关键瓶颈。高频调用场景下&#xff0c;API请求突发性、用户…...

使用Taotoken CLI工具一键配置开发环境,简化团队协作的接入流程

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境&#xff0c;简化团队协作的接入流程 在团队协作开发大模型应用时&#xff0c;一个常见的挑…...