應老師的的要求,試用pillow把圖像的邊緣提取出來,其實就是簡單的圖片過濾(說的那么神乎)
ImageFilter:Python中的圖像濾波户魏,主要對圖像進行平滑、銳化挪挤、邊界增強等濾波處理叼丑。
過濾器,說直白一點,就是去除一些無用的信息,把那些有價值、重要的數(shù)據(jù)信息保留下來.
首先,安裝Pillow,在虛擬環(huán)境中輸入命令pip install Pillow
接下來,開始操作圖像
pillow中有個module——ImageFilter扛门,就叫圖片過濾器鸠信,里面現(xiàn)成的圖片加強過濾器有這么幾個:
BLUR? 模糊
CONTOUR? 輪廓
DETAIL? 細節(jié)
EDGE_ENHANCE? 邊緣強化
EMBOSS? ?浮雕
FIND_EDGES? 邊緣突出
SHARPEN? 銳化(至于銳化的效果,這幅圖不明顯论寨,不過線條是略有清晰的星立,和DETAIL差不多)
SMOOTH? 平滑(效果會把你的圖片往一個中間值拉,讓整張圖看起來沒那么突出葬凳,或者說更模糊绰垂?)
SHARPEN(GaussianBlur(高斯模糊)、UnsharpMask(反銳化掩碼濾波)火焰、Kerne(卷積核濾波)劲装、RankFilter(排序濾波)、MedianFilter(最小值濾波器)昌简、MinFilter(中值濾波)占业、MaxFilter(最大值濾波)、ModeFilter(模式濾波))
代碼:
from PIL import Image
from PIL import ImageFilter
im = Image.open('Unknown.jpg')
im1 = im.filter(ImageFilter.EMBOSS)
im1.save('find_edges.jpg')
im1.close()
效果展示
模糊:
輪廓:?
細節(jié):
邊緣強化:?
GaussianBlur:高斯模糊
?from PIL import Image, ImageFilter
im = Image.open('Unknown.jpg')
gbF = im.filter(ImageFilter.GaussianBlur(radius=10))
gbF.show()
UnsharpMask:反銳化掩碼濾波
from PIL import Image, ImageFilter
im = Image.open('Unknown.jpg')
umF = im.filter(ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3))
umF.show()
①radius:模糊半徑
②percent:反銳化強度(百分比)
③threshold:被銳化的最小亮度
Kernel:卷積核濾波
from PIL import Image, ImageFilter
im = Image.open('Unknown.jpg')
kF = im.filter(ImageFilter.Kernel((3, 3), (1, 2, 2, 2, 0, 0, 1, 2, 2), scale=None, offset=10))
kF.show()
①size:核的大写渴辍(width, height)
②kernel:核權值序列如3*3的為(1, 2, 2, 2, 0, 0, 1, 2, 2)
③scale:縮放因子
④offset:偏移量(使用的話谦疾,則將該值加到縮放后的結(jié)果上)
RankFilter:排序濾波
對于輸入圖像的每個像素點,等級濾波器根據(jù)像素值犬金,在(size念恍,size)的區(qū)域中對所有像素點進行排序六剥,然后拷貝對應等級的值存儲到輸出圖像中
from PIL import Image, ImageFilter
im = Image.open('Unknown.jpg')
rfF = im.filter(ImageFilter.RankFilter(5, 8))
rfF.show()
①size:核的大小(width, height)
②rank:如例子樊诺,在每個像素點為中心的5x5區(qū)域25個像素點中選擇排序第8位的像素作為新的值
MinFilter:最小值濾波器
對于輸入圖像的每個像素點仗考,該濾波器從(size,size)的區(qū)域中拷貝最小的像素值存儲到輸出圖像中
from PIL import Image, ImageFilter
im = Image.open('Unknown.jpg')
minF = im.filter(ImageFilter.MinFilter(5))
minF.show()
①size:核的大写逝馈(size=N)
MedianFilter:中值濾波
對于輸入圖像的每個像素點秃嗜,該濾波器從(size,size)的區(qū)域中拷貝中值對應的像素值存儲到輸出圖像中
from PIL import Image, ImageFilter
im = Image.open('Unknown.jpg')
medF = im.filter(ImageFilter.MedianFilter(5))
medF.show()
①size:核的大卸倥颉(size=N)
MaxFilter:最大值濾波
對于輸入圖像的每個像素點锅锨,該濾波器從(size,size)的區(qū)域中拷貝最大的像素值存儲到輸出圖像中
from PIL import Image, ImageFilter
im = Image.open('Unknown.jpg')
maxF = im.filter(ImageFilter.MaxFilter(5))
maxF.show()
①size:核的大辛滴帧(size=N)
ModeFilter:模式濾波
對于輸入圖像的每個像素點必搞,該濾波器從(size,size)的區(qū)域中拷貝出現(xiàn)次數(shù)最多的像素值存儲到輸出圖像中囊咏。如果沒有一個像素值出現(xiàn)過兩次極其以上恕洲,則使用原始像素值。
from PIL import Image, ImageFilter
im = Image.open('Unknown.jpg')
modF = im.filter(ImageFilter.ModeFilter(5))
modF.show()
①size:核的大忻犯睢(size=N)
剩下的效果大家可以自己去試試.,我就不再一一為大家展示了.保留一些神秘性,哈哈哈···