日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 0 前言
  • 1 安裝與貼圖
  • 2 算法原理
    • 2.1 計算像素頻率
    • 2.2 計算像素相對距離
    • 2.3 計算合適貼圖
  • 3 配置功能
  • 4 使用:以圣誕老人為例
  • 推薦內容

0 前言

Tiler是一種使用各種其他較小圖像平鋪創建新圖像的工具,它與其他馬賽克工具不同,因為它可以適應多種形狀、大小、方向的貼圖,稱為buil in build。Tiler的英文意思是瓷磚,可以把它想象成用一個個自定義的瓷磚鋪滿圖像的過程。通過使用Tiler最終可以達到像素風或文字云,適合用來制作自己的LOGO或頭像

示意圖如下所示,正好在圣誕節前后,我調了一個圣誕風格的LOGO

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


這是商業圖標制作

1 安裝與貼圖

Tiler的安裝非常簡單

git clone https://github.com/nuno-faria/tiler.git cd tiler pip 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 = 0for y in img:for x in y:if len(x) < 4 or ignore_alpha or x[3] != 0:counter[tuple(x[:3])] += 1else:counter[(-1,-1,-1)] += 1total += 1if total > 0:mode_color = max(counter, key=counter.get)if mode_color == (-1,-1,-1):return None, Noneelse:return mode_color, counter[mode_color] / totalelse:return None, None

2.2 計算像素相對距離

常用的距離度量方法是閔可夫斯基距離
dist(xi,xj)=∥xi?xj∥p=(∑u∣xiu?xju∣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 1dist(xi?,xj?)=xi??xj?p?=(u?xiu??xju?p)1/p,p?1

特別地,當p=1p=1p=1時為曼哈頓距離;當p=2p=2p=2時為歐氏距離;當p=∞p=\infinp=時為切比雪夫距離。這里的距離度量就采用了歐式距離,表征了像素差

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 = Nonemin_tile_img = Nonefor 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 = distmin_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 = 4 ROTATIONS = [0] COLOR_DEPTH = 32 RESIZING_SCALES = [0.1] PIXEL_SHIFT = (20, 1) OVERLAP_TILES = False RENDER = False POOL_SIZE = 8 OUT = 'out.png' IMAGE_TO_TILE = "./images/santa-claus.png" TILES_FOLDER = "./tiles/lines/gen_line_h"

接著終端運行

python tiler.py

即可生成如下的效果

更多玩法交給大家探索!

推薦內容

  • 本手、妙手、俗手?我用AI寫2022高考全國作文題,會被看出來?
  • AI繪畫突然爆火?快速體驗二次元畫師NovelAI(diffusion)
  • AI寫代碼、修Bug,甚至還想統治人類?快速體驗ChatGPT
  • 吳恩達對話劉慈欣:讓科幻更有勇氣,讓人工智能更有想象力

🔥 更多精彩專欄

  • 《ROS從入門到精通》
  • 《機器人原理與技術》
  • 《機器學習強基計劃》
  • 《計算機視覺教程》

👇源碼獲取 · 技術交流 · 抱團學習 · 咨詢分享 請聯系👇

總結

以上是生活随笔為你收集整理的图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。