【颜色识别】【Python+OpenCV】KNN(K近邻算法)实现魔方颜色识别【 3-1】
更多内容参考:原创文章作者:无敌三角猫。如若转载,请注明出处:古月居 https://www.guyuehome.com/37111
1.颜色识别
该程序利用KNN实现魔方颜色识别,特征采用RGB的颜色直方图,它可以区分白、黑、红、绿、蓝、橙色、黄色和紫色,如果你想分类更多颜色或者提高分类准确率,可以通过调整训练集数据或者考虑使用其他的特征如**颜色矩)**或者颜色相关图。
你可以使用color_recognition_api实现实时的颜色识别,作者提供了两种识别方式,一种是摄像头实时识别颜色(color_classification_webcam.py),
另一种实现对单张图片的颜色识别(color_classification_image.py )
该程序实现的功能:
- 特征提取:对训练集图像提取RGB颜色直方图特征。
- 训练KNN分类器:通过RGB颜色直方图值训练KNN分类器
- 通过训练好的KNN分类器分类:逐帧读取摄像头,对每帧图像进行特征提取,最后通过训练好的KNN分类器判别物体的颜色。
TODS:
- 添加新颜色。
- 提取新特征。
- 添加新分类器。
2.理论介绍
- 在这个研究中,我们使用KNN分类器算法,分类器通过图像的RGB颜色直方图值进行训练,整体的工作流程如下图所示:
对于基于机器视觉和机器学习的目标检测或识别系统,应该了解两个核心点:1.特征提取(即在图片中如何表示感兴趣的特征,并与其他特征进行区分);2.分类(实现分类的算法,特别是在具体的实现中,我们称为分类器,这个分类器有时是指一个数学公式,由输入数据指向类别。)
对于该项目来讲:
- 特征提取=颜色直方图:颜色直方图是图像中一种颜色的分布表示,对于数字图像而言,颜色直方图表示一个固定的颜色范围列表中,每个颜色范围中有像素的数量,这些颜色范围跨越图像的颜色空间,即所有可能的颜色的集合。
- 分类器—KNN算法:KNN算法是一种简单的算法,他存储了所有可用的案例,并根据相似度距离来对新的案例进行分类(例如距离函数),KNN是一种1970年代的非参数技术,常被用于统计估计和模式识别。
3.代码实现
OpenCV库被用于颜色直方图计算和KNN分类器,Numpy用于矩阵或N维数组的计算,这个程序是在Linux环境下用Python开发的。
在“src”目录下,有两个Python类:
- color_classification_webcam.py:测试类从网络摄像头实现实时颜色识别。
- color_classification_image.py:测试类实现对单张图像的颜色识别。
在“color_recognition_api”目录下,有两个Python类:
- feature_extraction.py :特征提取操作类。
- knn_classifier.py:KNN分类器。
feature_extraction.py特征提取类的解释:
我们可以通过该Python类实现获取图像的RGB颜色直方图,例如绘制红色图像的RGB颜色直方图
- 我决定使用直方图的RGB通道像素数量最大的对应的Bin Number来作为特征,因为我可以得到占主导地位的RGB值来创建特征向量用于训练,例如这个红色图像的占主导地位的RGB值是[254,0,2]。
- 对于每个训练图像,使用颜色直方图我获得了占主导地位的RGB的值,然后给他们打上标签,这是因为KNN是有监督学习,然后我将这些特征向量部署到csv文件当中,因此,我创建了我的训练特征向量数据集,它保存在src目录下training.data。
knn_classifier.py注释:
这个类提供了这些主要的计算;
- 获取训练数据。
- 获取测试图像特征。
- 计算欧式距离。
- 找到K个最近邻点。
- 预测颜色。
- 返回预测是否正确。
color_classification_webcam.py注释:它是我们这个程序的主要类,它提供了一下功能:
- 调用 feature_extraction.py 创造训练数据。
- 调用knn_classifier.py)用于分类。
4结论
- 我认为训练数据对于分类准确率有重要的影响,我非常仔细的创建了我的训练数据集,但是如果有更合适的数据集,可能效果更好。
- 另一个重要的影响是闪光和阴影,在我的测试图像中,在光线较差或者阴影下拍摄的图片被分类错误,也许一些滤波算法可以提前处理一下测试图像,然后送给KNN分类器,以提高分类的准确性。
【颜色识别】【Python+OpenCV】KNN(K近邻算法)实现魔方颜色识别【 3-1】相关推荐
- knn K近邻算法python实现
本文主要内容: knn K近邻算法原理 sklearn knn的使用,以及cross validation交叉验证 numpy 实现knn knn改进方法 1 knn K近邻算法原理 K近邻算法:给定 ...
- Python实现KNN(K近邻)回归模型(KNeighborsRegressor算法)并应用网格搜索算法寻找最优参数值项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 K近邻算法回归模型则将离待预测样本点最近的K个训练样本点的平均值 ...
- 【20210922】【机器/深度学习】KNN (K近邻) 算法详解
一.算法概念 KNN, K-near neighbor,即最近邻算法.它是一种分类算法,算法思想是:一个样本与数据集中的 k 个样本最相似,如果这 k 个样本中的大多数属于某一个类别,则该样本也属于这 ...
- 【机器学习实战】k近邻算法实战——手写识别系统
文章目录 手写识别系统 步骤: 准备数据:将图像转换为测试向量 测试算法:使用k-近邻算法识别手写数字 [完整代码] 手写识别系统 为了简单起见,这里构造的系统只能识别数字0到9,参见图2-6.需要识 ...
- opencv的K近邻算法
K Nearest Neighbors 计算待测数据与样本库中每个样本的距离,得到距离最小的前K个,进行投票表决,前K个中某一类的样本数最多,则判断待测数据为此类. 一.opencv 中主要的函数有: ...
- python机器学习---1. K近邻算法
机器学习的方法是基于数据产生的"模型" (model) 的算法,也称"学习算法" (learning algorithm).包括有监督学习(supervised ...
- knn(k近邻算法)——matlab
目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 读取数据 4.2 分离训练集和测试集 4.3 归一化处理 4.4 ...
- KNN K近邻算法学习
KNN算法.k-nearest neighbor,或者K-近邻算法是一种经典的机器学习算法,可以完成分类和回归任务. KNN算法主要思想: 对于输入的特征X,选取与他记录最近的K个点,统计这K个点所属 ...
- K近邻算法KNN的简述
什么是KNN K近邻算法又称KNN,全称是K-Nearest Neighbors算法,它是数据挖掘和机器学习中常用的学习算法,也是机器学习中最简单的分类算法之一.KNN的使用范围很广泛,在样本量足够大 ...
- 【模式识别】实验二:K近邻算法(KNN)
KNN是模式识别中的经典算法,本次实验就MNIST数据集来做KNN算法的实验,并结合前一次的LDA降维对数据进行进一步处理. 实验报告图片版 pdf版本可以戳这:模式识别实验报告:KNN K近邻算法 ...
最新文章
- 通过异或运算符加密解密 难度二星
- Java新手看招 常用开发工具介绍
- linux下安装mysql笔记
- 一个命名管道可以被多个客户端访问吗_Redis 的事务机制和管道技术Pipelining
- .NET做人脸识别并分类
- 化工原理物性参数_化工原理知识点总结整理
- python 程序停止打印日志_停止 Spring Boot 服务的几种优雅姿势
- mysql jdbc 单利_java单利模式设计
- FPGA系统时间戳偶尔异常分析及定位
- 05章 体检套餐管理系统
- 110个oracle常用函数总结(7),oracle110个最常用函数
- 教你如何构建异步服务器和客户端的 Kotlin 框架 Ktor
- linux 播放器系统,Linux 中的十大开源视频播放器
- 基于深度学习的图像篡改识别
- echarts动态循环出多个相同图表但不同数据动态渲染图表
- c语言around用法,around 的用法
- 使用Java对PDF进行电子签章
- Windows上解除宽带限速(网速明显提升)
- pyspark 数据类型转换_apache spark-将pyspark字符串转换为日期形式
- Mac版docker安装
热门文章
- Python socket.send()与socket.sendall()的区别
- 01. View C++ as a federation of languages
- 归并排序MergeSort
- 堆排序HeapSort
- c# export server 调用sql_C# 如何调用 SPL 脚本
- long 雪花算法_Snowflake 雪花算法
- 人脸图像特征提取方法(HOG、Dlib、CNN)简述
- mysql 5.1 开启慢查询_mysql开启慢查询
- recyclerview 横向卡片效果_UI设计中卡片式应如何设计
- vbs比较两个数组里的数的大小_BAT 高频面试题:寻找两个有序数组的中位数