文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-06 14:57

关注

目录

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文件中:

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯