|
• 進行白色與黑色的調整計算。
• 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 型態學運算
|
|