返回顶部
首页 > 资讯 > 后端开发 > Python >图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)
  • 899
分享到

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

图像处理人工智能python计算机视觉opencv 2023-09-06 14:09:45 899人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录 0 前言1 安装与贴图2 算法原理2.1 计算像素频率2.2 计算像素相对距离2.3 计算合适贴图 3 配置功能4 使用:以圣诞老人为例推荐内容 0 前言 Tiler是一种使

目录

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

--结束END--

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

本文链接: https://lsjlt.com/news/397173.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作