python颜色识别算法_纯Python编写K-means算法,提取图片中的主体颜色
在文章
今天我用Python手写了一个K-means算法,来完成同样的功能。
聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓“物以类聚,人以群分”。
K-means是聚类算法中最为简单、高效的,核心思想:由用户指定k个初始中心,以作为聚类的类别,重复迭代更新数据集的中心直至算法收敛。
代码有点长,关键代码我会进行分析,其余代码没必要进行分析。
首先,我们定义一个计算距离的方法,我采用的是欧氏距离。
def get_euclidean_distance(_pixel, _center):
"""
获得欧氏距离
:param _pixel: 像素
:param _center: 中心
:return: 欧氏距离
"""
d_pow_2 = 0
for _channel_index in range(n_channels):
d_pow_2 += pow(_pixel[_channel_index] - _center[_channel_index], 2)
return np.sqrt(d_pow_2)
然后定义一个方法来计算中心,方便之后进行迭代。
def get_nearest_center(_pixel):
"""
获得最近的中心
:param _pixel: 像素
:return: 最近的中心的index
"""
min_center_d = get_euclidean_distance(_pixel, centers[0])
min_center_index = 0
for _center_index in range(1, k):
d = get_euclidean_distance(_pixel, centers[_center_index])
if d < min_center_d:
min_center_d = d
min_center_index = _center_index
return min_center_index
下面的模块用于计算新的中心,体现了K-means的关键思想。
def cal_new_center():
"""
如果有的中心没有最邻近的,那就说明选到了俩一样颜色的中心(虽然概率很小)那就重新选一个
:return: 新的中心
"""
# 归零
center_counts = np.zeros(k, dtype=int)
_centers = np.zeros((k, n_channels), dtype=int)
# 对每个类逐通道求和
for _pixel_index in range(n_pixels):
center_counts[labels[_pixel_index]] += 1
for _channel_index in range(n_channels):
_centers[labels[_pixel_index]][_channel_index] += img[_pixel_index][_channel_index]
# 对每个中心算出均值
for _center_index in range(k):
if center_counts[_center_index] > 0:
for _channel_index in range(n_channels):
_centers[_center_index][_channel_index] /= center_counts[_center_index]
else:
# 要是中心选重了就重新再选一个(虽然概率很小)
_centers[_center_index] = img[random.randint(0, n_pixels - 1)]
print('WARNING: Center %d has no pixel, re-choose center randomly...' % _center_index)
return _centers
上面的代码已经完成了K-means的关键部分,其他的代码都是在对图像像素进行遍历处理,以及得到K-means聚类后进行输出。代码已经上传在github上了:https://github.com/shulisiyuan/mainColor
我使用这张图片进行了测试,设置的中心点K=4
下面是代码跑出来的结果,可以看出下面的四种颜色主要就是图片中的颜色。
这种方法跑的比较慢,有很多可以优化的地方,后续有时间再慢慢优化。
打算收集大量图片进行分析,构建一个相似颜色图片的聚类。简单实现Google的图图片颜色聚类功能。
python颜色识别算法_纯Python编写K-means算法,提取图片中的主体颜色相关推荐
- python 提取图片的某个颜色_使用python提取图片中的主体颜色
上次国庆节去谷歌开发者大会,体验了很多有趣的人工智能项目. 其中有一个颜色匹配的环节,叫做"AI调色板,解码缤纷艺术世界",让我觉得很有意思,回来后,我计划自己实现一个类似的功能. ...
- python矩阵乘法算法_纯python进行矩阵的相乘运算的方法示例
本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下: def matrixMultiply(A, B): # 获取A的行数和列数 A_row, A_col = shape(A) ...
- python 训练识别验证码_用Python机器学习搞定验证码
原标题:用Python机器学习搞定验证码 写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字.字母的组合,国内也 ...
- python人脸识别库_基于Python的face_recognition库实现人脸识别
Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...
- python进行矩阵计算公式_纯python进行矩阵的相乘运算的方法示例
本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下: def matrixMultiply(A, B): # 获取A的行数和列数 A_row, A_col = shape(A) ...
- k近邻算法_【机器学习】K近邻算法(KNN)
点击关注上方"小田学python",获取更多精彩内容 机器学习是一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.专门研究计算机怎样模拟或实现人类的 ...
- python条形码识别系统_基于Python与Zbar的无人机盘点条形码识别研究
2018 年 第 6 期 第 4 0 卷 总 第 2 8 8 期 物流工程与管理 LOGISTICS ENGINEERING AND MANAGEMENT 物流技术 doi :10.3969/ j . ...
- python人脸识别项目_基于Python与命令行人脸识别项目(系列二)
在knowe_people文件夹中创建blur_faces_on_webcam.py文件并写入以下代码: import face_recognition import cv2 # This is a ...
- python百度识别花草_用python代码实现调用百度的免费植物识别接口
# coding=utf-8 import requests import base64 import unittest import time class WordScanTest(unittest ...
最新文章
- Delphi中将DBGRID中的内容输出到WORD中
- 蓝牙BLE ATT剖析(一)
- html网页缩小之后div框移动,css – DIV在浏览器中放大和缩小时移动
- 计算机检索技巧知识,初学者常用电脑技巧知识
- windows下的diskpart指令彻底格式化清除U盘
- python将dataframe导出为csv_python将dataframe转换为csv,为每列导出一个格式独特的文本文件...
- 前端导出excel文件带样式_vue前端使用xlsx导出数据到excel中--最简单的方式
- linux环境下企业基于域名访问的web于电子邮件服务器 论文,基于Linux平台的企业邮件服务器搭建...
- ajaxFileUpload plugin上传文件 chrome、Firefox中出现SyntaxE
- 从mysql数据库读取Blob_读取数据库Blob类型的文本数据
- 经常用到的一些小病的预防的治疗
- SAP SolMan 严重漏洞的自动化 exploit 代码遭公开
- laravel leftjoin 右侧取最新一条_高铁规划:湖南至广西将增添一条高铁,填补中西部地区铁路网空白...
- linux svn与apache,linux下svn与apache整合搭建
- 六款顶级Wifi无线网络搜索工具盘点
- python 模拟键盘_用Python模拟键盘输入
- 【论文阅读】A Survey of Incentive Mechanism Design for Federated Learning 联邦学习激励机制设计综述
- mysql-mmm高可用群集
- 微信公众号整套逻辑的支付和退款
- OpenStack安装部署报错记录,Error processing default value xxx for Opt type of HostAddress
热门文章
- SQL语句操作优先级顺序
- relative和absolute使用
- JAVA和C浮点数,为什么在C ++和Java中使用float函数会产生不同的结果?
- python创建列表副本_Python编程15:Python列表的排序和列表的副本
- 中考计算机考试试题山西注意事项,2021年山西省中考考试注意事项(3)
- php给网页加水印_php实现图片添加水印功能
- 可燃气体浓度多少合格_科普:气体容积单位LEL%、VOL%、TLV(ppm)之间如何换算?...
- 小学计算机病毒与危害的课,第一课《电脑病毒与危害》.ppt
- java gui 监听组合键,Java之GUI按钮监听事件ActionListener
- php中new与构造函数,php - 在构造函数中使用“ new”关键字 - SO中文参考 - www.soinside.com...