【Python】爬虫+ K-means 聚类分析电影海报主色

作者:Amy

译者:Fibears

原文链接:http://blog.nycdatascience.com/students-work/using-python-and-k-means-to-find-the-colors-in-movie-posters/

每部电影都有自己的海报,即便是在如今这互联网时代,电影海报仍是一个强大的广告形式。每部电影都会根据自身的主题风格设计海报,精致的电影海报可以吸引人们的注意力。那么问题来了,不同风格的电影海报对颜色有什么样的偏好呢?

利用Python爬取海报数据

为了回答这个问题,我们需要分析不同风格电影的海报情况。首先,我们需要构建一个电影海报数据的数据集,因此我利用 Bing 图像搜索引擎来获取海报数据。

接下来我利用 Python 从网页中抓取电影海报数据并将其储存到本地电脑中,最终我得到四种电影类型(惊悚片、喜剧、动画片和动作片)的112张海报数据。

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。

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 数据绘制三维散点图,其中每个点代表海报的一个颜色。通过比较四张散点图我们可以发现大多数惊悚片的海报中都有暗黑色和红色,而喜剧和动画片则会根据不同的电影主题选择不同的配色。

喜剧 VS. 动画片

动作片 VS. 惊悚片

转换颜色信息

由于我们很难从 1120 种颜色中提取一些特定的模式,因此我们需要降低颜色的维度。我们可以将颜色信息转换到 Lab 色彩空间中,然后利用Python中的 Delta E equations和colormath包来计算海报中的颜色和基础颜色之间的视觉差异程度。

我通过最小距离法将这些颜色分成 17 类。下表是喜剧电影海报数据的部分数据:

电影类型对比

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

从上图中我们可以发现黑色、灰色和白色是电影海报中最常见的三种颜色。这是因为基本色的数量太少了,而大多数电影海报都有黑色的标题和边框。

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-04-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

【Python】爬虫+ K-means 聚类分析电影海报主色调

每部电影都有自己的海报,即便是在如今这互联网时代,电影海报仍是一个强大的广告形式。每部电影都会根据自身的主题风格设计海报,精致的电影海报可以吸引人们的注意力。那...

2305
来自专栏数据派THU

ML:教你聚类并构建学习模型处理数据(附数据集)

1798
来自专栏大数据挖掘DT机器学习

【Keras】基于SegNet和U-Net的遥感图像语义分割

上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰“天空之眼”。这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割,所以刚好又把...

1.3K7
来自专栏PPV课数据科学社区

【学习】正态分布检验是怎么回事

什么是正态分布? 正态分布是在统计分析最广泛应用的一类分布,自然界、社会、科研、生活、生产中的很多现象都被发现近似地服从正态分布,它无处不在,让你在纷繁芜杂的数...

2823
来自专栏机器之心

MIT提出精细到头发丝的语义分割技术,打造效果惊艳的特效电影

随着电影越来越关注 CGI,电影制作人必须更加擅长「合成」,即将前景和背景图像融合,比如将演员放在飞机或行星上,或者放在电影《黑豹》里瓦坎达这样的虚构世界中。

1391
来自专栏数据小魔方

图表案例——一个小小的图表所折射出的作图哲学

今天仍然是一个经济学人的图表案例,而且从方法上来讲,略有难度,挺费工夫。 原图上这样的,风格一如既往,呈现的数据是一个季度时间序列数据列,折线图,添加了时间趋势...

2916
来自专栏量子位

Facebook的新AI「Rosetta」会识别表情包,还会删帖丨论文

不过,表情包上的那些网络金句都是.jpg或者.gif的图片格式,无法被搜索、无法被计算机监测,字太小不清晰的时候还会让视力不好的同学看不清楚。

992
来自专栏量子位

CVPR 2017最佳论文出炉,DenseNet和苹果首篇论文获奖

李林 编译整理 量子位 报道 | 公众号 QbitAI 正在夏威夷举办的CVPR 2017,刚刚评出了今年的两篇最佳论文(Best Paper Awards):...

3807
来自专栏机器之心

想入门机器学习?机器之心为你准备了一份中文资源合集

2925
来自专栏周力的专栏

有图又怎样?我有文来斗:表情包文字识别解析

表情中提取出的文字,亦可用于我们后续的文本分析,情感预测,语义理解等。因此,表情文字识别成为了重中之重。这篇文章是我们在文字识别上的一些积累和成果,分享给大家。

6590

扫码关注云+社区