我的编程空间,编程开发者的网络收藏夹
学习永远不晚

图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)

目录

0 前言

Tiler是一种使用各种其他较小图像平铺创建新图像的工具,它与其他马赛克工具不同,因为它可以适应多种形状、大小、方向的贴图,称为buil in buildTiler的英文意思是瓷砖,可以把它想象成用一个个自定义的瓷砖铺满图像的过程。通过使用Tiler最终可以达到像素风或文字云,适合用来制作自己的LOGO或头像

示意图如下所示,正好在圣诞节前后,我调了一个圣诞风格的LOGO

在这里插入图片描述

这是用我的世界像素格做的蛋糕

在这里插入图片描述
这是商业图标制作

在这里插入图片描述

1 安装与贴图

Tiler的安装非常简单

git clone https://github.com/nuno-faria/tiler.gitcd tilerpip install -r requirements.txt

内置以下的贴图

贴图文件夹含义样例
at@在这里插入图片描述
circles圆形在这里插入图片描述
clips回形针在这里插入图片描述
hearts心形在这里插入图片描述
lego乐高在这里插入图片描述
lines线条在这里插入图片描述
minecraft我的世界在这里插入图片描述
plus加号在这里插入图片描述
times乘号在这里插入图片描述
waves波浪线在这里插入图片描述

2 算法原理

2.1 计算像素频率

因为最终选择的贴图颜色要和原图相近,否则会很违和,所以在算法开始前要计算图像的相对像素频率

def mode_color(img, ignore_alpha=False):    counter = defaultdict(int)    total = 0    for y in img:        for x in y:            if len(x) < 4 or ignore_alpha or x[3] != 0:                counter[tuple(x[:3])] += 1            else:                counter[(-1,-1,-1)] += 1            total += 1    if total > 0:        mode_color = max(counter, key=counter.get)        if mode_color == (-1,-1,-1):            return None, None        else:            return mode_color, counter[mode_color] / total    else:        return None, None

2.2 计算像素相对距离

常用的距离度量方法是闵可夫斯基距离
d i s t ( x i , x j ) = ∥ x i − x j ∥ p = ( ∑ u ∣ x i u − x j u ∣ p ) 1 / p ,p⩾1 \mathrm{dist}\left( \boldsymbol{x}_i,\boldsymbol{x}_j \right) =\left\| \boldsymbol{x}_i-\boldsymbol{x}_j \right\| _p=\left( \sum\nolimits_u^{}{|x_{iu}-x_{ju}|}^p \right) ^{{{1}/{p}}}, p\geqslant 1 dist(xi,xj)=xixjp=(uxiuxjup)1/p,p1

特别地,当 p = 1 p=1 p=1时为曼哈顿距离;当 p = 2 p=2 p=2时为欧氏距离;当 p = ∞ p=\infin p=时为切比雪夫距离。这里的距离度量就采用了欧式距离,表征了像素差

def color_distance(c1, c2):    c1_int = [int(x) for x in c1]    c2_int = [int(x) for x in c2]    return math.sqrt((c1_int[0] - c2_int[0])**2 + (c1_int[1] - c2_int[1])**2 + (c1_int[2] - c2_int[2])**2)

2.3 计算合适贴图

将像素频率和相对距离匹配起来,可以得到在这个位置上最合适的贴图

def most_similar_tile(box_mode_freq, tiles):    if not box_mode_freq[0]:        return (0, np.zeros(shape=tiles[0]['tile'].shape))    else:        min_distance = None        min_tile_img = None        for t in tiles:            dist = (1 + color_distance(box_mode_freq[0], t['mode'])) / box_mode_freq[1]            if min_distance is None or dist < min_distance:                min_distance = dist                min_tile_img = t['tile']        return (min_distance, min_tile_img)

3 配置功能

Tiler提供了以下功能,在conf.py文件中:

  • DEPTH:颜色深度

    颜色深度也称为位分辨率(Bit Resolution),指在位图图像或视频视频缓冲区的一个像素中,每个颜色分量(Red、Green、Blue、Alpha通道(的比特数。所谓“位”指的是二进制位或是比特,位分辨率决定可以标记为多少种色彩等级的可能性,位分辨率越大可表示的色彩越丰富

  • ROTATIONS:旋转列表

    因为Tiler支持各种位姿的贴图,所以在这里定义可能的旋转角度,从这里可以看出Tiler比一般的马赛克风格工具自由度更大

  • COLOR_DEPTH:同DEPTH

  • RESIZING_SCALES:贴图的缩放列表,支持不同大小的贴图

  • PIXEL_SHIFT:为创建每个框而移动的像素数

    在这里插入图片描述

  • OVERLAP_TILES :是否支持重叠

  • RENDER :是否建立渲染

  • POOL_SIZE :处理图像的进程数

  • OUT :输出路径

  • IMAGE_TO_TILE :输入路径

  • TILES_FOLDER:小图标路径

4 使用:以圣诞老人为例

我选择了这组参数

DEPTH = 4ROTATIONS = [0]COLOR_DEPTH = 32RESIZING_SCALES = [0.1]PIXEL_SHIFT = (20, 1)OVERLAP_TILES = FalseRENDER = FalsePOOL_SIZE = 8OUT = 'out.png'IMAGE_TO_TILE = "./images/santa-claus.png"TILES_FOLDER = "./tiles/lines/gen_line_h"

接着终端运行

python tiler.py

即可生成如下的效果

在这里插入图片描述

更多玩法交给大家探索!

推荐内容


🔥 更多精彩专栏


👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

来源地址:https://blog.csdn.net/FRIGIDWINTER/article/details/128434890

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录