玩蛇网提供最新Python编程技术信息以及Python资源下载!

Python爬虫与K-means聚类算法分析多数据图片主色方法

python 培训

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

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

python 图片爬虫

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

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

需要用到的python 模块有:python repython ospython urllib2等...

#代码格式请自行调整!www.iplaypython.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()

参考文章:Python多线程爬虫抓取扫描器

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

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

#代码格式请自行调整!www.iplaypython.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 种颜色信息。

部分结果如下图所示:

python 分析图片主色调

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

python 图像处理

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

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

python 图片处理

转换颜色信息:

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

降低颜色维度的操作方法是:
(1)需要将颜色信息转换到 Lab 色彩空间中
(2)再利用Python中的 Delta E equations和colormath包来计算,图片中的颜色和基础颜色之间存在的视觉差异程度如何。

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

python 图片分析数据

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

python 喜剧电影海报数据的部分数据

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

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

玩蛇网原创,转载请注明文章出处和来源网址:http://www.iplaypython.com/code/graphics/gr5773.html



微信公众号搜索"玩蛇网Python之家"加关注,每日最新的Python资讯、图文视频教程可以让你一手全掌握。强烈推荐关注!

微信扫描下图可直接关注

玩蛇网Python新手QQ群,欢迎加入: ① 240764603 玩蛇网Python新手群
文章发布日期:2016-03-25 19:07 玩蛇网 www.iplaypython.com

上一篇:python采集文章中图片的方法源码
下一篇:没有了
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
相关文章推荐
别人正在看
特别推荐
去顶部去底部