作者: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 类。下表是喜剧电影海报数据的部分数据:

电影类型对比

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

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

戳“阅读原文”找机器学习/R资料!

↓↓↓

python实现kmeans图像分割、一只遥望大海的小狗_【Python】爬虫+ K-means 聚类分析电影海报主色...相关推荐

  1. python代码画小狗_程序员教你用代码手绘一只可爱的小狗,正好拿去送给女朋友给她个惊喜...

    最近经常在抖音上刷到会画画的大神给小姐姐手绘各种可爱的小动物,非常的哇塞哦~ 作为程序员的我那是羡慕不已啊!我要是学会这招是不是可以尝试给我心仪很久的女神告白了?女神没准会很开心!(好吧,我承认我是舔 ...

  2. 怎么用python画小狗_程序员教你用代码手绘一只可爱的小狗,正好拿去送给女朋友给她个惊喜...

    最近经常在抖音上刷到会画画的大神给小姐姐手绘各种可爱的小动物,非常的哇塞哦~ 作为程序员的我那是羡慕不已啊!我要是学会这招是不是可以尝试给我心仪很久的女神告白了?女神没准会很开心!(好吧,我承认我是舔 ...

  3. python爬虫豆瓣电影评价_使用爬虫爬取豆瓣电影影评数据Python版

    在 使用爬虫爬取豆瓣电影影评数据Java版 一文中已详细讲解了爬虫的实现细节,本篇仅为展示Python版本爬虫实现,所以直接上代码 完整代码 爬虫主程序 # 爬虫启动入口 from C02.data ...

  4. python的枚举和for循环求一个数的约数_[Python 第二版] 4. 分支循环与枚举

    什么是表达式 表达式(Experession)是运算符(operator)和操作数(operand)所构成的序列. # 作业计算下列结果 >>> a = 1 >>> ...

  5. python爬虫豆瓣网TOP250电影海报图片

    最近打算用爬虫爬取一些资料,主要是图片来扩充数据库 先用一些文字信息练手 还是第三方的requests好用呢,比python自带的urllib 好用呢 import requests from bs4 ...

  6. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  7. 小狗的python代码_【Python】程序员教你用代码手绘一只可爱的小狗,正好拿去送给女朋友给她个惊喜...

    最近经常在抖音上刷到会画画的大神给小姐姐手绘各种可爱的小动物,非常的哇塞哦~ 作为程序员的我那是羡慕不已啊!我要是学会这招是不是可以尝试给我心仪很久的女神告白了?女神没准会很开心!(好吧,我承认我是舔 ...

  8. python代码画小狗_python代码画小狗_皮皮康之Python编程初探2:python函数的使用

    Hello 大家好,我是皮皮康. 相信此刻的你已经通过昨天的资料学会了如何使用python库以及对turtle库有了一定的了解,今天我们就结合turtle库讲述python函数的使用. [函数是什么? ...

  9. 怎么用python画小狗_怎么用python画小猪佩奇

    最近社会猪可是火遍了大江南北,不蹭下热度可对不起它.见过手画的佩奇,见过用代码画的吗? 没有?那就来看我大显身手. 用python的turtle库来画小猪佩奇. 有人问:turtle难不难? 答曰:不 ...

  10. 用python画小狗_在家无聊用 Python 画单身狗

    python turtle 可以画图,搞出许多有趣的可视化东西,比如单身狗: from turtle import * # setup # 设置画布大小 screensize(100, 100) # ...

最新文章

  1. oracle10默认备份路径,oracle 10g RMAN备份及恢复
  2. fiddler自动响应AutoResponder之正则匹配Rule Editor
  3. jQuery框架学习第一天:开始认识jQuery
  4. iOS开发之图片分辨率与像素对齐
  5. MTK eCos系统的有线驱动收包流程
  6. 使用GDB进行系统调用过程简析
  7. idea2019.3.3不能热部署_复盘曼联2-1热刺:3大战术力助索肖自救,1人成“红魔”复苏关键...
  8. 4种方法解决js跨域的实现方式
  9. 纺织服装外贸行业解决方案丨汇信外贸软件
  10. 绘制中国象棋棋盘 - CSS Pseudo Elements 的使用
  11. C++ Bayer图像格式,使用GDAL进行格式转换。
  12. win11系统输入法增加小鹤双排
  13. 每日一题#10-22 Ransomware
  14. FOC控制-以SVPWM理论控制矢量磁场
  15. Java中的增强for循环和break continue的使用 以及流程控制训练
  16. HarmonyOS——一个面向物联网的操作系统
  17. java 委派关系_一文读懂java类加载之双亲委派机制
  18. python群控手机_(干货)带你用 Python 实现自动化群控(零基础入门篇)
  19. 《追风筝的人》读后感
  20. 企业为什么要做软文推广?

热门文章

  1. CImageList用法介绍
  2. 贾跃亭个人破产内幕曝光 差一点获得中东土豪投资
  3. 每个Linux 用户都应该知道的Linux技巧
  4. (八) 一起学 Unix 环境高级编程 (APUE) 之 信号
  5. window10激活
  6. CI框架 url指向错误 配置根目录
  7. matlab幅度调制滚动条的程序_利用MATLAB实现信号的幅度调制与解调
  8. 令人震惊!JSP已经淘汰,却才搞明白JSP和Servlet之间不可告人的关系!
  9. c++ strcmp函数
  10. JAVA日期格式化大写YYYY-MM-dd和小写yyyy-MM-DD的坑