点击上方“蓝字”关注我们

看了电影《楚门的世界》的海报,是不是觉得特别炫酷?将各个图片拼在一起,最后呈现为主角,在那个年代,这种海报制作堪称一绝!

别羡慕,你也可以完成!

在开始之前,你有没有想过上面的图片是怎么实现的?难道这是用 ps 一张张拼起来的?光靠人工把近千张图片按照色域一一排列,这个可能性几乎为0

所以,马赛克图片生成器就产生了。那么今天,我们就用 Python 做一个马赛克图片生成器。只需要 200 行 Python 代码,就可以将任意图片转换成马赛克效果。既可以用来记录校园生活、游戏生涯,又可以用作礼物。

01

项目思路

项目大概分为 3 个步骤:

  1. 计算素材库中每张图片的平均色

  2. 把目标图片切分成平均的色块,与素材库图片进行替换

  3. 全部替换完成后,再与原始图像进行融合

02

计算图像平均值

一张图像,是通过许多的像素组成的。为了生成马赛克图片,我们的想法是,将原有图像的每一个小部分,使用颜色与这一小部分相似的图像进行替换,从而生成马赛克风格的图像。

如何计算图片的颜色相似度?这里要引用 RGB 和 HSV 的概念。

RGB 色彩空间是,由三个通道表示一幅图像。三个通道分别为红色 (R),绿色 (G) 和蓝色(B),通过这三种颜色的不同组合,可以形成几乎所有的其他颜色。

但是,在自然环境下,图像容易受自然光照、遮挡等情况的影响,也就是人眼观察图片会对图片的亮度比较敏感。而 RGB 色彩空间的三个分量都与亮度密切相关,只要亮度改变,RGB 颜色的三个分量都会改变。

同时,由于人眼对于这 RGB 这三种颜色的敏感程度是不一样的。在单色中,人眼对红色最不敏感,蓝色最敏感,所以 RGB 色彩空间是一种均匀性较差的色彩空间。

由于 RGB 色彩空间不能方便的比较颜色之间的相似度,于是我们要使用 HSV 色彩空间。HSV 色彩空间也是由三个分量组成的,分别是:

  • Hue(色调)

  • Saturation (饱和度)

  • Value (明度)

我们会常用下图的圆柱体来表示 HSV 色彩空间,其中:

  • H 用极坐标的极角表示;

  • S 用极坐标的轴的长度表示;

  • V 用圆柱的高度表示。

计算图片 HSV 值的代码如下:

class mosaic(object):"""定义计算图片的平均hsv值"""def __init__(self, IN_DIR: str, OUT_DIR: str, SLICE_SIZE: int, REPATE: int,OUT_SIZE: int) -> None:self.IN_DIR = IN_DIR  # 原始的图像素材所在文件夹self.OUT_DIR = OUT_DIR  # 输出素材的文件夹, 这些都是计算过hsv和经过resize之后的图像self.SLICE_SIZE = SLICE_SIZE  # 图像放缩后的大小self.REPATE = REPATE  # 同一张图片可以重复使用的次数self.OUT_SIZE = OUT_SIZE  # 最终图片输出的大小def resize_pic(self, in_name: str, size: int) -> Image:"""转换图像大小"""img = Image.open(in_name)img = ImageOps.fit(img, (size, size), Image.ANTIALIAS)return imgdef get_avg_color(self, img: Image) -> Tuple[float, float, float]:"""计算图像的平均hsv"""width, height = img.sizepixels = img.load()if type(pixels) is not int:data = []  # 存储图像像素的值for x in range(width):for y in range(height):cpixel = pixels[x, y]  # 获得每一个像素的值data.append(cpixel)h = 0s = 0v = 0count = 0for x in range(len(data)):r = data[x][0]g = data[x][1]b = data[x][2]  # 得到一个点的GRB三色count += 1hsv = rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0)h += hsv[0]s += hsv[1]v += hsv[2]hAvg = round(h / count, 3)sAvg = round(s / count, 3)vAvg = round(v / count, 3)if count > 0:  # 像素点的个数大于0return (hAvg, sAvg, vAvg)else:raise IOError("读取图片数据失败")else:raise IOError("PIL 读取图片数据失败")

以上内容出自蓝桥云课免费课程—— Python 制作马赛克拼合图像,但由于篇幅有限,无法一一呈现。如果你有任何代码问题,欢迎大家随时通过文末方式和我交流。

戳戳“阅读原文”直达课程页面!

如何破解《楚门的世界》马赛克海报?附完整教程!相关推荐

  1. 人生如戏,戏如人生——《楚门的世界》

    "楚門在面對自由的渴望,未來的恐懼和安定的生活之中的抉擇,令人深刻." 超现实主义黑色喜剧,很另类.深刻的电影作品,金凯瑞主演,赞一下! [@more@] 来自 " IT ...

  2. 《楚门的世界》观后感

    背景 看它的原因是因为美国10大TOP电影排行中有它的名字.所以希望看看为何有这么高的评分. 描述 对于该电影

  3. 互联网时代,你我皆楚门

    NEW 关注Tech逆向思维视频号 最新视频→[少女做胸透被要求脱光 真有必要还是过分要求?] 出品|新熵 文 | 苒一 编辑|伊页 "隐私与便利的交易." "如果有人想 ...

  4. 从楚门世界看人性的弱点

    最近在读<人性的弱点>,看了<楚门世界>,说点自己的感悟. 楚门世界 首先说说楚门,这个小阿仁从出生起,就生活在一个由大导演基斯督虚构的"桃园岛"中.阿仁的 ...

  5. 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之设备与楼栋单元设置

    防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之设备与楼栋单元设置的基本操作 CPU卡门禁一体机 1.运行软件 双击桌面的快捷图标:yk ...

  6. 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之用户卡加密发卡设置说明

    防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之用户卡加密发卡设置说明 1.设置控制器的扇区和密码 本节说明主要介绍控制器和用户卡使用的 ...

  7. 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之软件功能说明

    1.软件概述 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00版可同时管理门禁系统和梯控系统,门禁系统设备有嵌入式.一体式.分体式,主要设置控制设 ...

  8. Photoshop:6.14世界献血海报设计分享poster design(内附psd)

    前言 Photoshop:6.14世界献血海报设计技巧分享poster design 作为一个ps新手,由于平台比较少,能够拿来锻炼的也就是学校的海报比赛,这个应该算是我第二次参加学校的海报大赛.这一 ...

  9. 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之软件的安装卸载说明

    防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之软件的安装卸载说明 CPU卡梯控读头 1.电脑配置要求 CPU:Pentium 733 ...

最新文章

  1. Delphi避免重复打开窗体
  2. Android Activity 生命周期和LaunchMode 规则
  3. Ubuntu14.04LTS下安装tensorflow(Anaconda3+pycharm+tensorflow+CPU)
  4. Python,Pandas,Bokeh Cheat Sheet-Data Science
  5. 用java模仿钉钉_java接入钉钉机器人(附源码)
  6. 监管落地,能否带来牙膏市场的日后繁荣?
  7. java手机震动_Windows Phone 7 开发 之使手机震动
  8. 题解 P1137 【旅行计划】
  9. install mysql 5.6.22 source code
  10. python怎么读取中文文件-Python3 中文文件读写方法
  11. 技巧:linux开机自动启动脚本(转)
  12. Html时间自定义控件
  13. 计算机要重启电脑才能检测出u盘启动,电脑使用U盘需要重启才能识别分析及解决措施...
  14. springboot志愿者管理系统
  15. Solidity智能合约案例——投票存在的问题
  16. 法语学习笔记——语音
  17. 软考—信息项目管理师(信息化和信息系统二)
  18. html自动适应屏幕分辨率,css如何设置适配不同分辨率屏幕?
  19. Flyme 6将于30日公测 魅蓝Note5有望率先尝鲜
  20. 计算机老师中专教学论文,中专计算机多元化教学论文

热门文章

  1. ELK技术栈(四) elasticsearch 数据聚合 数据同步
  2. K8S篇-安装nfs插件
  3. 群晖添加php种子,NAS 篇一:群晖上远程制作PT种子的方法介绍
  4. 从源码角度看CPU相关日志
  5. 2020战地指挥官服务器维护,《神雕侠侣》2020年6月11日更新维护新服开启公告
  6. 操作系统 首次适应算法 最佳适应算法(C++)
  7. C/C++试题集——结构体篇
  8. Java 继承(extends)详解
  9. 【雕爷学编程】Arduino动手做(65)---红外寻迹传感器
  10. 解读苹果新财报:iPhone销量回暖实现逆增长,苹果再唱高歌?