<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          2021來了,用Python換一張頭像到新年!

          共 2502字,需瀏覽 6分鐘

           ·

          2021-01-12 23:38


          新的一年,新氣象。


          不少人都會選擇換一個微信頭像,迎接新的一年。


          這期小F就來教大家,如何使用Python生成emoji風(fēng)格的頭像。


          效果大致如下圖,由很多的emoji圖片方塊組成一張新的頭像圖片



          細(xì)節(jié)圖~



          主要是通過matplotlib、pillow和numpy這三個庫來實現(xiàn)的。


          import?matplotlib.pyplot?as?plt
          from?scipy?import?spatial
          from?PIL?import?Image
          import?numpy?as?np


          對于numpy和matplotlib(以及幾乎所有的圖像處理庫)而言,圖像基本上只是一個矩陣(例如A),其中每個像素(p)都是A的元素。


          如果是灰度圖像,則每個像素(p)只是一個數(shù)字(或標(biāo)量)。如果為浮點數(shù),則為[0, 1]。如果為整數(shù),則為[0, 255]。


          如果不是灰度級(例如在這次的情況下),則每個像素都是尺寸為3-紅色(R),綠色(G)和藍(lán)色(B)或尺寸為4-RGBA的矢量(A代表Alpha,表示的是透明度)。


          首先讀取圖像,并且將圖像尺寸縮小。


          #?讀取圖片,并且修改圖片大小
          G_sm?=?np.array(Image.open('fans.png').resize([50, 50]).getdata()).reshape([50,?50,?3])/256

          #?顯示圖片
          plt.figure()
          plt.imshow(G_sm)
          plt.title('Original?Image')
          plt.show()


          然后讀取emoji圖像數(shù)據(jù),一共是有近1600個emoji圖像數(shù)據(jù)。


          #?讀取emoji數(shù)據(jù)
          emoji_array?=?np.load("emojis_16.npy")

          #?獲取emoji的平均顏色值
          emoji_mean_array?=?np.array([ar.mean(axis=(0,1))?for?ar?in?emoji_array])?

          #?將得到的每個emoji平均顏色值存儲在樹中以加快搜索速度
          tree?=?spatial.KDTree(emoji_mean_array)


          整個圖像的平均顏色計算公式如下。



          np.load,讀取磁盤數(shù)組數(shù)據(jù)的函數(shù),通常數(shù)組是以未壓縮的原始二進(jìn)制格式保存在擴(kuò)展名為.npy的文件中。


          indices?=?[]
          #?平整數(shù)組,一維
          flattened_img?=?G_sm.reshape(-1,?G_sm.shape[-1])
          print(flattened_img.shape)

          #?匹配最相似的表情符號的像素
          for?pixel?in?flattened_img:
          ????pixel_?=?np.concatenate((pixel,?[1]))
          ????#?查詢最近的索引
          ????_,?index = tree.query(pixel_)
          ????indices.append(index)


          將原圖上每個像素點的顏色均值和emoji的顏色均值配對上。


          #?從索引中獲取對應(yīng)的表情符號
          emoji_matches?=?emoji_array[indices]

          #?獲取圖片的高度
          dim?=?G_sm.shape[0]
          print(dim)

          #?設(shè)置最終生成圖像的大小,每個表情符號的形狀都是(16,16,4),R,?G,?B,?alpha
          resized_ar?=?emoji_matches.reshape((dim,?dim,?16,?16,4))


          設(shè)置生成圖像的大小,每個emoji圖片的大小設(shè)置成16*16。


          #?轉(zhuǎn)換單個表情符號補丁(5維)
          #?使用numpy塊生成完整的圖像(三維)
          final_img?=?np.block([[[x]?for?x?in?row]?for?row?in?resized_ar])?


          生成最終結(jié)果圖像,并且保存。


          #?設(shè)置畫布
          plt.figure()
          #?去除坐標(biāo)軸
          plt.axis('off')
          #?顯示圖片
          plt.imshow(final_img)

          #?保存emoji馬賽克風(fēng)格圖像,去除白邊
          plt.savefig('image_emoji.png',?bbox_inches="tight",?pad_inches=0.0)
          plt.show()


          通過設(shè)置plt.savefig的參數(shù),去除圖像白邊,保存圖片。


          下面就使用小F的微信頭像為例,來實驗一波~



          生成的emoji圖看起來不是很細(xì)膩,可以設(shè)置一下圖片參數(shù)為100。


          G_sm?=?np.array(Image.open('weixin.png').resize([100,?100]).getdata()).reshape([100,?100,?3])/256


          得到結(jié)果如下。



          看起來還不錯,大家伙也可以使用自己喜歡的頭像去生成~


          公眾號回復(fù)「頭像」,即可獲取使用到的代碼以及相關(guān)文件。


          萬水千山總是情,點個點 ???行不行。





          程序員GitHub,現(xiàn)已正式上線!

          接下來我們將會在該公眾號上,專注為大家分享GitHub上有趣的開源庫包括Python,Java,Go,前端開發(fā)等優(yōu)質(zhì)的學(xué)習(xí)資源和技術(shù),分享一些程序員圈的新鮮趣事。





          年度爆款文案



          點這里,獲取新手福利

          瀏覽 54
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  三级片男人天堂 | 亚洲视频app | 免费做爱网站 | 操逼视频网. | 91丨豆花丨国产熟女 熟女 |