10 分鐘學(xué)會(huì) pillow 圖像處理 16 式
PIL:Python Imaging Library,是Python環(huán)境下最受歡迎的圖像處理庫(kù)之一。
pillow簡(jiǎn)單優(yōu)雅而功能強(qiáng)大,是圖像相關(guān)機(jī)器學(xué)習(xí)任務(wù)中算法工程師的親密合作伙伴。
我們將介紹pillow的如下16個(gè)圖片處理功能。
1, 圖片讀寫(xiě)
2, 圖片與array互轉(zhuǎn)
3, 圖片與string互轉(zhuǎn)
4, 圖片由彩色轉(zhuǎn)灰度
5, 圖片通道分離與合并
6, 調(diào)整圖片尺寸
7, 截取圖片部分區(qū)域
8, 圖片旋轉(zhuǎn)
9, 圖片翻轉(zhuǎn)
10, 提取圖片邊緣
11, 圖片高斯模糊
12, 在圖片上繪制文字
13, 在圖片上繪制直線
14, 在圖片上繪制矩形
15, 在圖片上繪制橢圓
16, 在圖片上粘貼其他圖片
安裝pillow非常簡(jiǎn)單。
pip?install?pillow
一,圖片讀寫(xiě)
import?numpy?as?np?
from?PIL?import?Image,ImageFilter,ImageDraw,ImageFont
#?讀取圖片
img?=?Image.open("./data/貓咪圖片.jpg")
print(img.format,?img.size,?img.mode)
print(img.info)
img?
JPEG?(641,?641)?RGB
{'jfif':?257,?'jfif_version':?(1,?1),?'dpi':?(72,?72),?'jfif_unit':?1,?'jfif_density':?(72,?72)}

#?保存圖片
img.save("./data/貓咪圖片.png")?
二,圖片與array互轉(zhuǎn)
#?Image轉(zhuǎn)np.array
img?=?Image.open("./data/貓咪圖片.jpg")
arr?=?np.array(img)
print(arr.shape)??
print(arr.dtype)
(641,?641,?3)
uint8
#?np.array轉(zhuǎn)Image
arr?=?(np.ones((256,256))*np.arange(0,256)).astype(np.uint8)
img?=?Image.fromarray(arr)
img?

三,圖片與string互轉(zhuǎn)
#?Image轉(zhuǎn)string?
import?base64
from?io?import?BytesIO
img?=?Image.open("./data/貓咪圖片.jpg")
buffer?=?BytesIO()
img.save(buffer,?'PNG')
b?=?buffer.getvalue()
s?=?base64.b64encode(b).decode("utf-8")?
print(s[0:1000])
iVBORw0KGgoAAAANSUhEUgAAAoEAAAKBCAIAAACnMebvAAEAAElEQVR4nOz96bMtSXIfiLl7ROR2lru+raqrqxsEQBAkRuKMRHI0kj6OSTLJ9M+KRumTTJwxyWZGJm6DIQguAHqp7lree3c5S2ZGhLs+eIbfOOe+V13dKGxjCHt27b5z82RGRnj4z3fHT69fJB3CiEhEDCIi5H1KKQt775umEYRpmsZx/PGnn3Vd94tf/OLu7u7y8lJExnG8uro6Ho/ee+ccMwNA13UXFxebzeZnP/uZcw4R53k+Ho/TNIkIIiIiMxMREaWUcs6bzebm5mae5/1+H2NsmiaEkHOe55mZvfcAkFKa5xkA9OL1er3ebv/oj/7IOSciOUbv/cPDAwr0fb/uh5ubmxDCeDgi4vF4/NnPfjYHBAAsQ38HgJxzSklEiAgARKRt22EYmqaZpul4PM7zbDMXEfgbMnSqurP2EwDGcaz/axf/DXq1aZq6rgMAEfmd3/mdm5ubn/3sZz//+c9TSgCgJCEiIYS+7+d5nqYp5+y9R8Scs4g45z5287NdtrUaOdknKICIZNfI8tOWlABczuv1uuu6lNI0TXo6mFkncHZ/AEhxdM7ps5TenHPOuZTSarXquo6Z7eAw80wZAHJMMUZP5L3PMY2Ho3Nuu1oPfS8iHJOIcMoxRiYnIjlnvQ8UCsk5O+dCCCEEXRb9PMWdnt+cc4wx50xEeuXxeBSRYRj6vnfO6XmJhwcqQ99UxzAMIqK/1y8ukpUVzPOsR7tt26ZphmGwZdEn6jQaDHoHRBTCnPM4juM89X2/Px6dcxcXF74JMcYQwna7TeCULyknSSkhovfezoWus1F+hFnXvGmapml0bjlnKIxCr0TEEIL3fjelpml0xexk7ff74/GoX1TmZqv9W3/3d66vr5l5HMfNsOr7npkJMMYoOSsnzjEpt5znOca42+2Ucg6HwzzPV1dXn3766YsXL0IIXdc1TQMA8zyP4xhj
#?string轉(zhuǎn)Image?
b?=?base64.b64decode(s.encode("utf-8"))?
buffer?=?BytesIO(b)?
img?=?Image.open(buffer)
img?

四,圖片由彩色轉(zhuǎn)灰度
#?轉(zhuǎn)成灰度
img?=?Image.open("./data/貓咪圖片.jpg")
img.convert("L")

五,圖片通道分離與合并
#?分離通道
img?=?Image.open("./data/貓咪圖片.jpg")
r,g,b?=?img.split()?
b?

#?合并通道
Image.merge(mode?=?"RGBA",?bands?=?[r,g,b,r])

六, 調(diào)整圖片尺寸
#?調(diào)整大小
img?=?Image.open("./data/貓咪圖片.jpg")
print(img.size)
img_resized?=?img.resize((300,300))
print(img_resized.size)
img_resized?
(641,?641)
(300,?300)

七, 截取圖片部分區(qū)域
img?=?Image.open("./data/貓咪圖片.jpg")
img_croped?=?img.crop(box?=?[78,24,455,320])?
print(img_croped.size)
img_croped
(377,?296)

八, ?圖片旋轉(zhuǎn)
img?=?Image.open("./data/貓咪圖片.jpg")
img_rotated?=?img.rotate(15,center?=?(0,0))?#以center為中心逆時(shí)針旋轉(zhuǎn)
img_rotated

九, 圖片翻轉(zhuǎn)
img?=?Image.open("./data/貓咪圖片.jpg")
#?左右翻轉(zhuǎn)
img_left_right?=?img.transpose(Image.FLIP_LEFT_RIGHT)
img_left_right?

#?上下翻轉(zhuǎn)
img_top_bottom?=?img.transpose(Image.FLIP_TOP_BOTTOM)
img_top_bottom

十, 提取圖片邊緣
img?=?Image.open("./data/貓咪圖片.jpg")
img_edges?=?img.filter(ImageFilter.FIND_EDGES)
img_edges?

十一, 圖片高斯模糊
img?=?Image.open("./data/貓咪圖片.jpg")
img_blur?=?img.filter(ImageFilter.GaussianBlur(radius=3))
img_blur?

十二, 在圖片上繪制文字
img?=?Image.open("./data/貓咪圖片.jpg")
draw?=?ImageDraw.Draw(img)
arial?=?ImageFont.truetype('./data/simsun.ttc',?46)
draw.text((250,450),"敢梭哈嗎?",font?=arial,?fill="white")
img

十三, 在圖片上繪制直線
img?=?Image.open("./data/貓咪圖片.jpg")
draw?=?ImageDraw.Draw(img)
draw.line([0,0,641,641],fill?=?"red",width?=?5)
img

十四, 在圖片上繪制矩形
img?=?Image.open("./data/貓咪圖片.jpg")
draw?=?ImageDraw.Draw(img)
draw.rectangle([78,24,455,320],?fill=None,?outline?='lawngreen',width?=?5)
img

十五, 在圖片上繪制橢圓
img?=?Image.open("./data/貓咪圖片.jpg")
draw?=?ImageDraw.Draw(img)
draw.arc(xy?=?[78,24,455,320],start?=?0,end?=?360,fill="red",width=5)
img

十六, 在圖片上粘貼其他圖片
img?=?Image.open("./data/貓咪圖片.jpg")
img_resized?=?img.resize((150,150))
img.paste(img_resized,box?=?[460,50])
img

感謝云哥的精品原創(chuàng),文章若有疑問(wèn)或需要與他交流,歡迎關(guān)注他的公眾號(hào):
評(píng)論
圖片
表情
