影象通道/幾何變換/裁剪
阿新 • • 發佈:2018-11-09
一 影象通道
1 彩色影象轉灰度圖
在轉成灰度圖之前,我們先來看看我們的彩色影象。
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
plt.figure("美女")
plt.imshow(img)
plt.axis("off")
plt.show()
print(img.size) #圖片的大小
print(img.mode) #圖片的模式
print(img.format) #圖片的格式
輸出結果如下所示:
(480, 502)
RGBA
PNG
然後轉成灰度圖片:
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
gray = img.convert("L")
plt.figure("美女")
plt.imshow(gray,cmap = "gray")
plt.axis("off")
plt.show()
結果如下:
使用函式convert()來進行轉換,它是影象例項物件的一個方法,接受一個 mode 引數,用以指定一種色彩模式,mode 的取值可以是如下幾種:
· 1 (1-bit pixels, black and white, stored with one pixel per byte)
· L (8-bit pixels, black and white)
· P (8-bit pixels, mapped to any other mode using a colour palette)
· RGB (3x8-bit pixels, true colour)
· RGBA (4x8-bit pixels, true colour with transparency mask)
· CMYK (4x8-bit pixels, colour separation)
· YCbCr (3x8-bit pixels, colour video format)
· I ( 32-bit signed integer pixels)
· F (32-bit floating point pixels)
2、通道分離與合併
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
gray = img.convert("L")
r,g,b,a = img.split()
pic = Image.merge("RGB",(r,g,b))
plt.figure("美女")
plt.subplot(2,3,1),plt.title("origin")
plt.imshow(img),plt.axis("off")
plt.subplot(2,3,2),plt.title("gray")
plt.imshow(gray,cmap = "gray"),plt.axis("off")
plt.subplot(2,3,3),plt.title("merge")
plt.imshow(pic),plt.axis("off")
plt.subplot(2,3,4),plt.title("r")
plt.imshow(r,cmap = "gray"),plt.axis("off")
plt.subplot(2,3,5),plt.title("g")
plt.imshow(g,cmap = "gray"),plt.axis("off")
plt.subplot(2,3,6),plt.title("b")
plt.imshow(b,cmap = "gray"),plt.axis("off")
plt.show()
結果如下圖所示:
二 裁剪圖片
從原圖片中裁剪感興趣區域(roi),裁剪區域由4-tuple決定,該tuple中資訊為(起始點橫座標 ,起始點縱座標, 寬度, 高度)。 Pillow左邊系統的原點(0,0)為圖片的左上角。座標中的數字單位為畫素點。
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
plt.figure("美女")
plt.subplot(1,2,1),plt.title("origin")
plt.imshow(img),plt.axis("off")
box = (45,35,230,260)
roi = img.crop(box)
plt.subplot(1,2,2),plt.title("ori")
plt.imshow(roi),plt.axis("off")
plt.show()
結果如下所示:
三 幾何變換
Image類有resize()、rotate()和transpose()方法進行幾何變換。
影象的縮放
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
dst = img.resize((128,128))
plt.figure("劉小輝證件照")
plt.imshow(dst),plt.axis("off")
plt.show()
結果如下所示:
影象的旋轉
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
dst1 = img.rotate(45) # 影象逆時針45度旋轉
dst2 = img.rotate(-45) # 影象順時針45度旋轉
plt.figure("美女")
plt.subplot(1,3,1),plt.title("origin")
plt.imshow(img),plt.axis("off")
plt.subplot(1,3,2),plt.title("anticlockwise")
plt.imshow(dst1),plt.axis("off")
plt.subplot(1,3,3),plt.title("clockwise")
plt.imshow(dst2),plt.axis("off")
plt.show()
結果如下圖所示:
影象轉換
左右互換
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
dst = img.transpose(Image.FLIP_LEFT_RIGHT) #左右互換
plt.figure("美女")
plt.imshow(dst),plt.axis("off")
plt.show()
結果如下:
上下互換
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
dst = img.transpose(Image.FLIP_TOP_BOTTOM) #上下互換
plt.figure("美女")
plt.imshow(dst),plt.axis("off")
plt.show()
結果如下:
旋轉的另一種表達形式
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open("D:\\楊冪.jpg")
dst1 = img.transpose(Image.ROTATE_90) #逆時針旋轉90度
dst2 = img.transpose(Image.ROTATE_180)
dst3 = img.transpose(Image.ROTATE_270)
plt.figure("美女")
plt.subplot(2,2,1),plt.title("0")
plt.imshow(img),plt.axis("off")
plt.subplot(2,2,2),plt.title("90")
plt.imshow(dst1),plt.axis("off")
plt.subplot(2,2,3),plt.title("180")
plt.imshow(dst2),plt.axis("off")
plt.subplot(2,2,4),plt.title("270")
plt.imshow(dst3),plt.axis("off")
plt.show()
結果如下圖所示:
注:transpose()和rotate()沒有效能差別。
參考:https://www.cnblogs.com/denny402/p/5096330.html