Using web scraper and K-means to find the colors in movie posters

Posted on Feb 25, 2016

Contributed by Amy(Yujing) Ma. She is currently in the NYC Data Science Academy 12 week full time Data Science Bootcamp program taking place between January 11th to April 1st, 2016. This post is based on her third class project – Web scraping(due on the 6th week of the program).


Amy Ma

January 30, 2016

Each movie has their own posters. Even in today’s always-online climate, the movie poster remains a powerful form of advertising. Every movie poster has its own color scheme, based on the movie’s type, content, and tone. Best movie posters should catch people’s eyes. So what kinds of colors are more likely to be used in different types of movies?

To play with some plots in this post, please go to the related post on  Rpubs.

Scrapping Images with Python

To answer this question, we need analysis movie posters of different movies. First of all, we need to build a training dataset of movie posters. So, I used the Bing Image search engine for this.


By using python to scrape all the movie posters from the website, I finally got 112 photos for 4 types of movies (horror, comedy, animation and action movies).


And the part of images I got looks like this:


Transforming the Images

To extract the color of images, we need to represent them in an easier and numerical way: Converting one image to a matrix of RGB pixels. For example, for a 200x200 px image, we convert it to a series of 40,000 RGB pixels.To maintain the size of the dataset, I resized the images down to 200x200.


Extract Colors from Posters

Then I used k-means clustering to do image segmentation, separate the pixels into different clusters based on their colors. Here is an example of image segmentation and compression from Bishop’s book Pattern Recognition and Machine Learning.

I used python to do the k-means analysis, the code is shown as below:

I tried k=3, k=5, and k=10 since lots of the movie posters used black letters and frames, k=3 and k=5 didn’t capture the main colors of posters. I chose k=10 to do k-means to all these 112 images. Finally, I got 1,120 colors of 112 movie posters

Part of the result shown as blow:





This result shows one of the weaknesses of k-means clustering, it’s sensitive to initialization, which leads to unwanted solutions. In this poster, K-means couldn’t capture any gold or orange colors.



3D Scatterplots

For each type of movies, I plot its movie posters’ colors into a 3D scatterplot based on RGB values. Each point represents a poster color. By comparing these 4 plots, I found most of the horror movies use darker and red colors in their own posters while the comedy and the animation movies would choose various colors to correspond to their themes.

Comedy vs. Animation

Screen Shot 2016-02-25 at 5.16.42 PM

Action vs. Horror


Screen Shot 2016-02-25 at 5.17.08 PM

Transforming the Colors

1120 colors contribute to many to discover the specific patterns, so we need to reduce the number of colors and make them into several categories. For this, we can transform the colors into Lab color space, and use Delta E equations and colormath package in python to calculate the visual difference between poster colors and some basic colors.

Then I categorized these colors into 17 colors by choosing the smallest distance value in each row.

This is a part of the dataset of comedy movie posters:

Screen Shot 2016-02-25 at 5.47.02 PM

Comparison based on Movie Types

After transforming the data, I counted a number of each basic color within each movie type.

Screen Shot 2016-02-25 at 5.48.15 PM

By plotting the data together, we would confirm our previous findings and also we can see black, gray and white are most frequent used colors in movie posters. This is because I have the too small sample size of basic colors, and most the movie posters have black titles and frames.

About Author

Related Articles

Leave a Comment

Google January 2, 2021
Google Very couple of sites that occur to be detailed below, from our point of view are undoubtedly very well really worth checking out.
Google December 18, 2020
Google Always a massive fan of linking to bloggers that I adore but don’t get a whole lot of link appreciate from.
Google September 17, 2019
Google One of our visitors recently proposed the following website.
Google September 17, 2019
Google Below you will locate the link to some internet sites that we assume it is best to visit.
mma clothes October 10, 2016
I really like your writing style, excellent info, appreciate it for putting up :D.
leg length discrepancy and Achilles September 23, 2016
I do aϲcept aas tгue with alⅼ oof the ideas you've offered for yoᥙг post. They aгe very convincing and can certainly work. Stіll, the posts are very sɦort for starters. May just yoս please prolong tgem a little ffom next time? Thanks for the post.
【Python】爬虫+ K-means 聚类分析电影海报主色-多维数 September 21, 2016
[…] 原文链接:… […]
toe caps September 12, 2016
I do acϲept as true witɦ all thee concepts you haᴠᥱ offеred for your post. They are ѵeгy convincіng and will certainly work. Still, the posts are too brief for novices. May just үou please lengthen them a bit froom next time? Thank you for the post.
【Python】爬虫+ K-means 聚类分析电影海报主色-再深一点 August 17, 2016
[…] 原文链接:… […]
WillieRat June 6, 2016
Che Zhao March 6, 2016
Cool. Maybe you can simply set some thresholds to discard those too dark or bright colors.
【Python】爬虫 K-means聚类分析电影海报主色调 - IT大道 March 4, 2016
[…] 原文链接:…原文作者:Amy (YuJing)Ma译者:数据工匠 […]
【Python】爬虫+ K-means 聚类分析电影海报主色 | 36大数据 March 2, 2016
[…] 原文链接:… […]
【Python】爬虫+K-means聚类分析电影海报主色调-数据分析网 March 1, 2016
[…] 原文链接:… 原文作者:Amy 译者:Fibears […]
【Python】爬虫+ K-means 聚类分析电影海报主色调 - IT大道 March 1, 2016
[…] 原文链接:… […]

View Posts by Categories

Our Recent Popular Posts

View Posts by Tags

#python #trainwithnycdsa 2019 airbnb Alex Baransky alumni Alumni Interview Alumni Reviews Alumni Spotlight alumni story Alumnus API Application artist aws beautiful soup Best Bootcamp Best Data Science 2019 Best Data Science Bootcamp Best Data Science Bootcamp 2020 Best Ranked Big Data Book Launch Book-Signing bootcamp Bootcamp Alumni Bootcamp Prep Bundles California Cancer Research capstone Career Career Day citibike clustering Coding Course Demo Course Report D3.js data Data Analyst data science Data Science Academy Data Science Bootcamp Data science jobs Data Science Reviews Data Scientist Data Scientist Jobs data visualization Deep Learning Demo Day Discount dplyr employer networking feature engineering Finance Financial Data Science Flask gbm Get Hired ggplot2 googleVis Hadoop higgs boson Hiring hiring partner events Hiring Partners Industry Experts Instructor Blog Instructor Interview Job Job Placement Jobs Jon Krohn JP Morgan Chase Kaggle Kickstarter lasso regression Lead Data Scienctist Lead Data Scientist leaflet linear regression Logistic Regression machine learning Maps matplotlib Medical Research Meet the team meetup Networking neural network Neural networks New Courses nlp NYC NYC Data Science nyc data science academy NYC Open Data NYCDSA NYCDSA Alumni Online Online Bootcamp Online Training Open Data painter pandas Part-time Portfolio Development prediction Prework Programming PwC python python machine learning python scrapy python web scraping python webscraping Python Workshop R R language R Programming R Shiny r studio R Visualization R Workshop R-bloggers random forest Ranking recommendation recommendation system regression Remote remote data science bootcamp Scrapy scrapy visualization seaborn Selenium sentiment analysis Shiny Shiny Dashboard Spark Special Special Summer Sports statistics streaming Student Interview Student Showcase SVM Switchup Tableau team TensorFlow Testimonial tf-idf Top Data Science Bootcamp twitter visualization web scraping Weekend Course What to expect word cloud word2vec XGBoost yelp