玩蛇网python爬虫与数据分析,本文结合python爬虫与K-means算法的使用,来分析图片主基色。色彩斑斓的一张图片,哪种颜色是它的主色调呢?今天就来讲讲如何用Python爬虫与K-means聚类分析图片主色方法。

今天我们拿电影的海报来举例吧。都知道第当一部电影要上映的时候,都会出许许多多漂亮的海报,不知道你有没有注意到。每种不同类别的电影海报图片,用的色调都是有自己的特定方向颜色。那么不同风格的电影海报对颜色有什么样的偏好呢?这就是我们今天要用Python爬虫与K-means聚类分析的重点所在。

首先用Python 爬虫从网页中抓取电影海报数据,同时将其储存到本地的电脑中,做为基础数据为下面做计算做准备。下载的图片种类分别为:惊悚片、喜剧、动画片和动作片。图片数据为112张,也就是112个数据源。

Python爬虫与K-means算法分析多数据图片主色方法,抓取图片部分源码如下:

#代码格式请自行调整!www.iplaypy.com

from bs4 import BeautifulSoup

import requests

import re

import urllib2

import os

import numpy as np

def get_soup(url):

return BeautifulSoup(requests.get(url).text)

image_type = “action movies”

query = “movie 2014 action movies poster”

url = “http://global.bing.com/images/search?q=” + query + “&qft=+filterui:imagesize-large&FORM=R5IR5″

soup = get_soup(url)

images = [a[‘src’] for a in soup.find_all(“img”, {“src”: re.compile(“mm.bing.net”)})]

for img in images:

raw_img = urllib2.urlopen(img).read()

cntr = len([i for i in os.listdir(“images”) if image_type in i]) + 1

f = open(“images/” + image_type + “_” + str(cntr), “wb”)

f.write(raw_img)

f.close()

为了方便提取图片的颜色信息,我们需要对图片的格式做下处理。需要将图像转换为 RGB 像素矩阵。好比于 200*200 像素的图片,将其转换成含有 40000 个像素信息的对象。现此同时要做的事情还有,为了保持数据集的大小,还需要再将图像的大小做一下,这里统一设定为200*200。

图像格式转换部分源码如下:

#代码格式请自行调整!www.iplaypy.com

def get_points(img):

points = []

w, h = img.size

for count, color in img.getcolors(w * h):

points.append(Point(color, 3, count))

return points

rtoh = lambda rgb: ‘#%s’ % ”.join((‘%02x’ % p for p in rgb))

提取图片中颜色的信息:

这里用到了 K 均值算法和颜色信息将海报分成许多不同的类别。

首先试了 k=3, k=5和k=10三种模型,但由于大多数海报通常都具有黑色的字体和边框,所以前两种模型无法获取海报中的主要颜色信息。最终选择了k=10的模型,并利用该算法处理 112 张海报,得到了 1120 种颜色信息。

部分结果如下图所示:

其实K 均值算法还是会存在一些不足之处的:该算法对初始值非常敏感,这会产生一些不想要的结果。在下面这两张海报图片中我们就可以看出,该算法无法获取金色或橘黄色的信息。

3D 散点图,分析结果如下:

针对不同种类的图片,做出的RGB数据绘制三维散点图。每个点代表图片的一个颜色。通过比较分析,可以看出四张散点图中,惊悚片的图片以暗黑色和红色为主,而喜剧和动画片则会根据不同的电影主题选择不同的配色。

转换颜色信息:

要在1120 种颜色中提取一些特定的模式的数据是很难的。所以需要降低颜色的维度。

降低颜色维度的操作方法是:

(1)需要将颜色信息转换到 Lab 色彩空间中

(2)再利用Python中的 Delta E equations和colormath包来计算,图片中的颜色和基础颜色之间存在的视觉差异程度如何。

通过最小距离法,将这些颜色分成17个类别,如下图所示:

电影类型对比数据:转换数据后,计算出每个电影类型中所包含的基本色数量。

通过绘制的数据从图中的基本色量信息,我们可以看到黑色、灰色和白色这三种颜色是图片最常见色。主要原因是这类电影宣传的海报都会突出标题之类,大都会使用加深的色调。

这中Python爬虫与K-means聚类分析合作得出的结果。Python爬虫与K-means聚类分析多数据图片主色方法,就简单介绍到这里。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/graphics/gr5773.html

相关文章 Recommend

python 3d绘图kmeans_Python爬虫与K-means聚类算法分析多数据图片主色方法相关推荐

  1. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  2. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  3. 基于python的K-means聚类提取图片主色

    基于python+opencv的彩色图片主色提取--利用K-means聚类算法 一.K-means聚类算法 1.K-means算法原理 2. K-means聚类算法流程 3.sklearn库中skle ...

  4. python编写图片主色转换脚本

    作者:吴海超 个人网站: www.wuhaichao.com 最近由于项目特需老是替换主题颜色,同时app里一些资源icon图片主色也要改,美工不提供切图只能靠自己了,开始想在iconfont上面找但 ...

  5. python 3d绘图-python - 轻松学会Matplotlib 3D绘图

    大多数数据可视化教程都给出了大致相同的基本内容:散点图,折线图,箱形图,条形图和热图等,一般都是2D平面图. 但是,如果我们希望跟进一步,该怎么办? 2D图只能显示一对x--y轴之间的关系;而3D图可 ...

  6. python 3d绘图 汉字_完美解决Python matplotlib绘图时汉字显示不正常的问题

    Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下: 1.在python安装目录的Lib目录下创建ch.py文件. 文件中代码为: 保存,以后通过 ...

  7. python 3D绘图 基础

    环境安装 见另一篇博文 链接 库安装 pip install -i https://pypi.douban.com/simple matplotlib 代码 import numpy as np im ...

  8. python 3d绘图 拖动_在python中以交互方式旋转3D绘图 - matplotlib

    我想知道如何以this视频中描述的方式交互式旋转3D绘图(如果您从上方或下方或从右侧或左侧决定).我可以在spyder或jupyter Notebook中生成3D绘图,但之后它仍然是静态的,我无法与它 ...

  9. python 3d绘图旋转_如何更改Matplotlib 3d旋转(mplot3d)的鼠标交互样式?

    我绘制了3D图,并用于quiver绘制x,y和z轴. 在matplotlib的交互式绘图中,我可以拖动和旋转3D绘图,但是存在一个问题: 当我拖动绘图时,似乎Z轴限制在一个平面上.无论我如何拖动绘图, ...

最新文章

  1. hadoop无法访问50070端口怎么办?
  2. centos7 mariadb mysql max_connections=214 无法修改的问题
  3. 深入理解groupByKey、reduceByKey区别——本质就是一个local machine的reduce操作
  4. SAP Commerce Cloud(原Hybris)和SAP Cloud for Customer(C4C)的SQL trace工具
  5. command对象的三个主要的方法 1119
  6. Redis分布式锁的实现原理看这篇就够了~
  7. 【Spark Summit East 2017】使用Spark MLlib和Apache Solr构建实时实体类型识别系统
  8. Python中*args和**kwargs的解释
  9. 1.Spring框架入门
  10. 支持乱序执行的RAFT协议 ppt
  11. Linux与Windows编译器的区别
  12. 自动驾驶 7-1 Carla 概述 - 自动驾驶汽车模拟Carla Overview - Self-Driving Car Simulation
  13. 大话2虚拟服务器怎么弄,大话西游2公益服风云1.0虚拟机镜像手工启动服务端+启动教程+客户端IP修改教程+数据库工具...
  14. python问题unindent does not match any outer indentation level在pycharm平台的解决方法
  15. 优秀数智生态伙伴|上海用诚软件廖晓军:以人才迭代推动云转型,实现专业化发展...
  16. 五行各500字,2位字符串组合,数据量大而采取分段输出表格形式方程式
  17. TCR-seq(T细胞受体测序)
  18. 引导魔女之力,征服星辰大海 主线篇: 重要事情说三遍: 推主线!推主线!!推主线!!! 简述: 1.本篇仅主线,涉及到的技巧全职业都可以参考; 2.考虑到萌新刚玩没有护卫者系统,故禁护
  19. 页面提交处理时候显示“正在处理,请稍后……”,防止二次提交功能。
  20. 微信公众号数据2019_2019年2月全国Top100购物中心微信公众号榜单

热门文章

  1. Arduino 眨眼睛(定时器版本)
  2. 网络游戏行业的冬天来了吗?
  3. office 365 ppt创意方法 (照片墙)
  4. H5获取地图定位并标记(百度地图)
  5. vue将对象变为字符串_字符串与对象的相互转化
  6. ifstream java_使用ifstream :: seekg和tellg获取文件大小
  7. 苹果谷歌Interdigital专利争夺战由来
  8. ActivityThread应用进程
  9. matlab 对象属性,matlab对象属性
  10. wifi 中间人攻击_什么是中间人攻击?该如何防止?