knn图像分类

K近邻算法(K-NN),即给定一个已训练的数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,则判定该输入实例同属此类。

1. OpenCV K近邻模块的使用

接下来通过一个例子,观察K近邻算法在OpenCV中的使用方法:

In [ ]:

%matplotlib inline

import cv2

import numpy as np

import matplotlib.pyplot as plt

通过随机数,创建训练数据集:

In [ ]:

rand1 = np.random.randint(0, 80, (20, 2)).astype(np.float32)

rand2 = np.random.randint(40, 100, (20, 2)).astype(np.float32)

train_data = np.vstack((rand1, rand2))

创建训练集结果:

In [ ]:

r1_label = np.zeros((20, 1)).astype(np.float32)

r2_label = np.ones((20, 1)).astype(np.float32)

td_label = np.vstack((r1_label, r2_label))

绘制训练集数据集和测试数据集:

In [ ]:

g = train_data[td_label.ravel() == 0]

b = train_data[td_label.ravel() == 1]

plt.scatter(g[:, 0], g[:, 1], 80, "g", "o")

plt.scatter(b[:, 0], b[:, 1], 80, "b", "s")

test = np.random.randint(0, 100, (1, 2)).astype(np.float32)

plt.scatter(test[:, 0], test[:, 1], 80, "r", "*")

plt.show()

训练K近邻算法:

In [ ]:

knn = cv2.ml.KNearest_create()

knn.train(train_data, cv2.ml.ROW_SAMPLE, td_label)

预测测试数据结果并打印结果:

In [ ]:

ret, results, neighbours, dist = knn.findNearest(test, 5)

print("当前随机可以判断的类型:", results[0][0])

print("距离最近的5个邻居是:", neighbours)

print("5个邻居的距离是:", dist)

2. K近邻图像匹配

KNN可以用做相似图像匹配算法来识别两个图像之间相似的内容。

本例中使用的例图如下:

图1

图2

代码实现如下:

In [ ]:

%matplotlib inline

import cv2

import matplotlib.pyplot as plt

按照灰度图像读入两张图片:

In [ ]:

img1 = cv2.imread("./emoji.jpg", cv2.IMREAD_GRAYSCALE)

img2 = cv2.imread("./emoji2.jpg", cv2.IMREAD_GRAYSCALE)

检测关键点和特征描述:

  • keypoint 是关键点的列表
  • desc 检测到的特征的局部图的列表

In [ ]:

# 获取特征提取器对象

orb = cv2.ORB_create()

keypoint1, desc1 = orb.detectAndCompute(img1, None)

keypoint2, desc2 = orb.detectAndCompute(img2, None)

获得knn检测器:

  • knn匹配可以返回k个最佳的匹配项
  • bf返回所有的匹配项

In [ ]:

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

matches = bf.knnMatch(desc1, desc2, k=1)

绘制匹配结果:

In [ ]:

img3 = cv2.drawMatchesKnn(img1, keypoint1, img2, keypoint2, matches, img2, flags=2)

plt.imshow(img3)

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/396784.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握 Nuxt 3 的页面元数据:使用 definePageMeta 进行自定义配置

title: 掌握 Nuxt 3 的页面元数据:使用 definePageMeta 进行自定义配置 date: 2024/8/11 updated: 2024/8/11 author: cmdragon excerpt: 摘要:本文详细介绍Nuxt 3框架中definePageMeta的使用方法,包括如何为页面组件定义元数据&#xff0…

集合的框架(之一)

集合的含义: 集合是一个可变的容器,可以随时向集合中添加元素,也可以随时从集合中删除元素。另外,集合还提供了若干个用来操作集合中数据的方法。集合里的数据,我们称之为元素(elements);集合只能用来存储…

2025年美国数学竞赛AMC8暑期备考:吃透625道真题和知识点(持续)

距离接下来最近的2025年AMC8美国数学竞赛还有几个月的时间,实践证明,做真题,吃透真题和背后的知识点是备考AMC8有效的方法之一。 通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以…

1915_开源C语言实现的通用队列

经常在工作中遇到一些队列处理的场景,以前要么是借用FreeRTOS这样的系统中的相关功能,要么是通过数组做一个简单的队列模型。但是,这两种方案都具有一定的局限性能,前者要求的FreeRTOS不见得相应的软件中有,而后者只能…

超好玩的肉鸽游戏:《暴君的游戏》手机单机游戏分享

《暴君的游戏》(Despots Game)是一款结合了自走棋和roguelike元素的像素策略冒险游戏。游戏以其独特的战斗系统和丰富的职业选择,为玩家提供了深度的策略体验和探索乐趣。 游戏特色包括: 角色职业多样性:玩家可以招募…

使用历史版本比对法排查C++程序中的内存泄漏问题

目录 1、问题描述 2、使用Process Explorer实时查看程序的虚拟内存占用 2.1、对于内存泄漏问题,需要查看程序占用的虚拟内存 2.2、Windows任务管理器中看不到程序进程占用的虚拟内存,使用Process Explorer工具可以看到 2.3、通过Process Explorer工具看到每次泄漏的内存…

大数据-75 Kafka 高级特性 稳定性-一致性保证 LogAndOffset(LEO) HightWatermark(HW) 水位/水印

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

LVS实战项目

LVS简介 LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基于LVSkeepalived实现。 LVS集群的类型 lvs-nat : 修改请求报文的目标IP, 多目标 IP 的 DNAT lvs-dr &#xff…

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——6Resnet实现黑线识别

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——6Resnet实现黑线识别 ​ 比赛还有重要部分就是黑线的识别,这块地平线社区的帖子很多 ​ 在本次我就使用了社区吴超大佬写出的文章,当然我们的步骤有所不同,也是比较省…

黄牛杀手 抢票脚本 V3.0

黄牛杀手 抢票脚本 V3.0 介绍 现在黄牛太tm多了,根本抢不到票 为了解决这个问题,开发了这个脚本,支持大麦网,淘票票、缤玩岛等多个平台 依赖 selenium (4.10.0以下版本) pip install selenium 现在黄牛太tm多了,根…

2.类和对象(上)

1. 类的定义 1.1 类定义格式 • class为定义类的关键字,Stack为类的名字,{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; (类和结构体非常像&#…

LVS原理——详细介绍

目录 lvs简介 LVS作用 LVS 的优势与不足 LVS概念与相关术语 LVS的3种工作模式 LVS调度算法 LVS-dr模式 LVS-tun模式 ipvsadm工具使用 lvs简介 LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器,是一个极好的负载均衡解决方案,它将一个…

计数排序,桶排序,基数排序

计数排序: 找出数据中的最大值和最小值,并创建哈希表,把 数据-最小值 作为数组的下标访问哈希表并标记数量,标记完后,遍历哈希表,当表中的值大于0,把 **下标最小值 (下标元素-最小值)**还原数据…

LLVM 寄存器分配

概述 基本寄存器分配器是四种寄存器分配器中最简单的寄存器分配pass实现(<llvm_root/livm/lib/CodeGen/RegAllocBasic.cpp>) 但麻雀虽小&#xff0c;五脏俱全&#xff0c;基本寄存器分配器中实现了根据溢出权重确实虚拟寄存器优先级、按优先级分配物理寄存器&#xff0…

韦东山瑞士军刀项目自学之UART

放自己一星期假回家&#xff0c;回来继续准备秋招。 本章记录关于UART协议的相关知识笔记。平时主要还是基于HAL库开发&#xff0c;但笔记里也讲了韦老师介绍的如何控制寄存器来设置UART的参数。 以及一些UART防止采集的抖动设置的一些策略与波特率与比特率的区别等。

文件共享服务NFS(服务名nfs,端口tcp/2049)

目录 前言 配置文件 工作原理 NFS服务器的配置 查看服务器是否安装 查看服务器状态 开启服务 编写配置文件 客户端挂载 前言 NFS&#xff08;Network File System&#xff09;是一种分布式文件系统协议&#xff0c;它允许网络中的不同计算机共享文件和目录&#xff0…

使用tailwindcss轻松实现移动端rem适配

本示例节选自小卷全栈开发实战系列的《Vue3实战》。演示如何用tailwindcss所支持的rem体系轻松实现一个仿b站移动端头部导航栏rem适配。 友情声明 学习分享不易&#xff0c;如果小伙伴觉得有帮助&#xff0c;点赞支持下。满30赞&#xff0c;将随文附赠录屏讲解&#xff0c;感谢…

树莓派4/5:运行Yolov5n模型(文末附镜像文件)

〇、前言 因国内网络问题&#xff0c;可直接烧录文末镜像文件&#xff0c;或者按照本教程进行手动操作。 一、实验目的 在树莓派4B运行Yolov5n模型。 二、实验条件 1、Windows 11计算机&#xff1a;安装了Mobaxterm 2、树莓派4B&#xff1a;64Bit Lite OS&#xff0c;安装了…

案例:Nginx + Tomcat集群(负载均衡 动静分离)

目录 案例 案例环境 案例步骤 部署Tomcat服务器 部署Nginx服务器 实现负载均衡和读写分离 日志控制 案例 案例环境 操作系统 IP 地址 角色 CentOS 192.168.10.101 Nginx服务器&#xff08;调度器&#xff09; CentOS 192.168.10.102 Tomcat服务器① CentOS 1…

uniapp 对于scroll-view滑动和页面滑动的联动处理

需求 遇到一个需求 解决方案 这个时候可以做一个内页面滑动判断 <!-- scroll-y 做true或者false的判断是否滑动 --> <view class"u-menu-wrap" style"background-color: #fff;"><scroll-view :scroll-y"data.isGo" scroll-wit…