| 
 | 
 
 
• 進行白色與黑色的調整計算。 
• skimage與opencv均可以挑選各種不同的過濾器形狀。 
• dilation 膨脹 
  • 指 白色的範圍擴大。 
  • 可以用來擴充邊緣。 
  • 可以用於填充小的孔洞。  
opencv擴展語法 
若由numpy直接產生圖形, 
dtype請設定np.uint8。 
• 當擴展值為2X2 
• skimage是左上角+1 
• opecv是左下角+1 - import cv2
 
 - import matplotlib.pyplot as plt
 
 - import numpy as np
 
 - img=np.zeros((13,13),dtype=np.uint8)
 
 - print(img)
 
 - plt.imshow(img,cmap='gray')
 
 - plt.show()
 
 - img[4:8,3:7]=1
 
 - print(img)
 
 - plt.imshow(img,cmap='gray')
 
 - plt.show()
 
 - kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(2,2))
 
 - print(kernel)
 
 - dst4=cv2.dilate(img,kernel)
 
 - print(dst4)
 
 - plt.imshow(dst4,cmap='gray')
 
 - plt.show()
 
  複製代碼 
 
可針對全彩圖象進行型態調整。 
opencv 型態學運算 
 
opencv 型態學運算 
 
opencv 型態學運算 
 
 
- import cv2
 
 - img=cv2.imread('mor2.png')
 
 - #img=cv2.imread('cat.jpg')
 
 - print(img)
 
 - print('shape:',img.shape)
 
 - cv2.imshow('img0',img)
 
 - kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
 
 - print(kernel)
 
 - dst4=cv2.dilate(img,kernel)
 
 - print(dst4)
 
 - cv2.imshow('img1',dst4)
 
 - cv2.waitKey(0)
 
  複製代碼 
 
opening 
• 先腐蝕再擴展 
• 可以先去除小區域的碎片資訊。 - import skimage.morphology as sm
 
 - from skimage import io,color
 
 - import matplotlib.pyplot as plt
 
 - img=color.rgb2gray(io.imread('mor.png'))
 
 - dst=sm.opening(img,sm.disk(13))
 
 - plt.imshow(img,cmap='gray')
 
 - plt.show()
 
 - plt.imshow(dst,cmap='gray')
 
 - plt.show()
 
  複製代碼- import cv2
 
 - img=cv2.imread('mor2.png')
 
 - #img=cv2.imread('cat.jpg')
 
 - print(img)
 
 - print('shape:',img.shape)
 
 - cv2.imshow('img0',img)
 
 - kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
 
 - print(kernel)
 
 - dst4=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
 
 - print(dst4)
 
 - cv2.imshow('img1',dst4)
 
 - cv2.waitKey(0)
 
  複製代碼 
 
mor這個範例呈現的效果  
opencv 型態學運算 
 
 
 
closing  
• 先擴展再腐蝕 
• 可以針對區域內的雜訊進行整合 - import cv2
 
 - img=cv2.imread('mor2.png')
 
 - #img=cv2.imread('cat.jpg')
 
 - print(img)
 
 - print('shape:',img.shape)
 
 - cv2.imshow('img0',img)
 
 - kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
 
 - print(kernel)
 
 - dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
 
 - print(dst4)
 
 - cv2.imshow('img1',dst4)
 
 - cv2.waitKey(0)
 
  複製代碼 
 
要opening還是closing? 
• 先查看圖形的邊界、線條。 
• 如果要去除的資料是在邊界、線條之外,建議選擇opening  
opencv 型態學運算 
 
 
- import cv2
 
 - img=cv2.imread('open1.png')
 
 - cv2.imshow('img0',img)
 
 - kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
 
 - dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
 
 - cv2.imshow('close',dst4)
 
 - dst5=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
 
 - cv2.imshow('open',dst5)
 
 - cv2.waitKey(0)
 
  複製代碼 
opencv 型態學運算 
 
 
 
• 先查看圖形的邊界、線條。 
• 如果要去除的資料是在邊界、線條裡面,建議選擇closing  
opencv 型態學運算 
 
 
- import cv2
 
 - img=cv2.imread('close1.png')
 
 - cv2.imshow('img0',img)
 
 - kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
 
 - dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
 
 - cv2.imshow('close',dst4)
 
 - dst5=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
 
 - print(dst5)
 
 - cv2.imshow('open',dst5)
 
 - cv2.waitKey(0) 
 
  複製代碼 
opencv 型態學運算 
 
 
 |   
 
 
 
 |