如何用技術手段將圖片背景變?yōu)橥该?
咪哥雜談

本篇閱讀時間約為 6 分鐘。
1
前言
上周給大家分享了人臉識別的一個 Python 庫。今天來繼續(xù)講講我上次在評論區(qū)留言的后續(xù)。

既然是追熱點的需求,大家可以想想,近幾年發(fā)生在身邊的熱點事件。
我來簡單的給大家梳理一下,從我畢業(yè)之后到今年我感知到的熱點事件。
2017年圣誕節(jié),微信頭像,戴上了圣誕帽子。
2019年國慶節(jié),微信頭像,給我一面國旗。
2020年初肺炎,微信頭像,共同抗疫,帶上口罩。
發(fā)現沒有,微信作為現在主流的社交平臺,每年伴隨熱點的總會和頭像有關。
頭像是什么?頭像可以代表網絡社交上一個人的門面,只要有一小撮人玩起來,那后面就像滾雪球似的,人也就越來越多。
所以,近期的文章,我來圍繞著制作頭像模板,或者說是圖像模板,來寫一寫相關的實現技術。等待著下一次的流量過來,直接套好模板,做出服務就行了。
上周寫了圖像人臉識別基礎的應用,那如何實現套模板?或者換個問法,如何將熱點套用在用戶原有的圖片上?

那一定是需要將熱點圖片的背景變?yōu)橥该魃⑶腋采w在原有的圖像上了。(此處,與今天文章的標題點題了。
)
今天先來介紹如何將圖片的背景顏色變?yōu)橥该魃O旅骈_始正文。
2
環(huán)境準備
開始之前,先來重溫下這篇文章的第四部分:
看完后,你會理解我們平時所說的 RGB 的含義,那后面就好說了。
接下來,只需要按照 pillow 庫。
pip install pillow3
代碼部分
代碼沒有幾行,但是需要理解下:
from PIL import Imagedef transparent_back():img = Image.open('old.png')# 圖片轉換為四通道。第四個通道就是我們要修改的透明度。返回新的對象img = img.convert('RGBA')????#?獲取圖片像素尺寸width, height = img.sizepixel_data = img.load()for h in range(height):for w in range(width):pixel = pixel_data[w, h]r = pixel[0]g = pixel[1]b = pixel[2]a = pixel[3]# 四通道,色彩值大于淺灰色,則將像素點變?yōu)橥该鲏Kif r > 220 and g > 220 and b > 220 and a > 220:????????????????pixel_data[w,?h]?=?(255,?255,?255,?0)????img.save('new.png')??#?保存新圖片
open打開本地圖片,通過 convert 方法將圖片轉為 R/G/B/A。
(RGBA是代表Red(紅色) Green(綠色) Blue(藍色)和 Alpha的色彩空間)
這里的 A,代表透明度的意思,盡管它英文本意 alpha 沒有透明度的意思。感興趣的可以看下知乎的這篇文章。
https://zhuanlan.zhihu.com/p/24415265
來直觀的看下 221 數值的顏色(灰色):

255呢(純白色)?

4
結果展示
以下面的眼鏡舉例,這是一張白底為底色的眼睛:

找了一張最近B站重做的《頭文字D》中周董圖片:

假如你沒有將眼鏡的圖片背景透明化,那么貼上去圖片最終成像:

如果眼鏡背景透明化了,那么貼上去的圖片則是這樣的:

至于如何將眼睛用技術手段覆蓋在周董眼睛上,將在下一篇中介紹。
5
總結

好啦,本篇內容就到這里,如果你有什么想說的,歡迎評論區(qū)留言。
一句很雞湯的話送給大家:“機會往往是留給有準備的人”。有些東西,看到了,可以提前布局,靜靜地等待"熱潮"的到來。
PS:本篇代碼很簡短,就不上傳到 github 了。
題圖 上海夜景?-?pexels -?Manuel Joseph
