TShopping

 找回密碼
 註冊
搜索
查看: 116|回復: 0

[教學] opencv型態學運算

[複製鏈接]
發表於 2021-3-22 23:11:01 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk  
• 進行白色與黑色的調整計算。
• skimage與opencv均可以挑選各種不同的過濾器形狀。
• dilation 膨脹
  • 指 白色的範圍擴大。
  • 可以用來擴充邊緣。
  • 可以用於填充小的孔洞。

opencv擴展語法

若由numpy直接產生圖形,
dtype請設定np.uint8。
• 當擴展值為2X2
• skimage是左上角+1
• opecv是左下角+1
  1. import cv2
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. img=np.zeros((13,13),dtype=np.uint8)
  5. print(img)
  6. plt.imshow(img,cmap='gray')
  7. plt.show()
  8. img[4:8,3:7]=1
  9. print(img)
  10. plt.imshow(img,cmap='gray')
  11. plt.show()
  12. kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(2,2))
  13. print(kernel)
  14. dst4=cv2.dilate(img,kernel)
  15. print(dst4)
  16. plt.imshow(dst4,cmap='gray')
  17. plt.show()
複製代碼


可針對全彩圖象進行型態調整。

opencv 型態學運算

opencv 型態學運算

opencv 型態學運算

opencv 型態學運算

opencv 型態學運算

opencv 型態學運算

  1. import cv2
  2. img=cv2.imread('mor2.png')
  3. #img=cv2.imread('cat.jpg')
  4. print(img)
  5. print('shape:',img.shape)
  6. cv2.imshow('img0',img)
  7. kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
  8. print(kernel)
  9. dst4=cv2.dilate(img,kernel)
  10. print(dst4)
  11. cv2.imshow('img1',dst4)
  12. cv2.waitKey(0)
複製代碼


opening
• 先腐蝕再擴展
• 可以先去除小區域的碎片資訊。
  1. import skimage.morphology as sm
  2. from skimage import io,color
  3. import matplotlib.pyplot as plt
  4. img=color.rgb2gray(io.imread('mor.png'))
  5. dst=sm.opening(img,sm.disk(13))
  6. plt.imshow(img,cmap='gray')
  7. plt.show()
  8. plt.imshow(dst,cmap='gray')
  9. plt.show()
複製代碼
  1. import cv2
  2. img=cv2.imread('mor2.png')
  3. #img=cv2.imread('cat.jpg')
  4. print(img)
  5. print('shape:',img.shape)
  6. cv2.imshow('img0',img)
  7. kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
  8. print(kernel)
  9. dst4=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
  10. print(dst4)
  11. cv2.imshow('img1',dst4)
  12. cv2.waitKey(0)
複製代碼


mor這個範例呈現的效果

opencv 型態學運算

opencv 型態學運算


closing
• 先擴展再腐蝕
• 可以針對區域內的雜訊進行整合
  1. import cv2
  2. img=cv2.imread('mor2.png')
  3. #img=cv2.imread('cat.jpg')
  4. print(img)
  5. print('shape:',img.shape)
  6. cv2.imshow('img0',img)
  7. kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
  8. print(kernel)
  9. dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
  10. print(dst4)
  11. cv2.imshow('img1',dst4)
  12. cv2.waitKey(0)
複製代碼


要opening還是closing?
• 先查看圖形的邊界、線條。
• 如果要去除的資料是在邊界、線條之外,建議選擇opening

opencv 型態學運算

opencv 型態學運算

  1. import cv2
  2. img=cv2.imread('open1.png')
  3. cv2.imshow('img0',img)
  4. kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
  5. dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
  6. cv2.imshow('close',dst4)
  7. dst5=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
  8. cv2.imshow('open',dst5)
  9. cv2.waitKey(0)
複製代碼

opencv 型態學運算

opencv 型態學運算


• 先查看圖形的邊界、線條。
• 如果要去除的資料是在邊界、線條裡面,建議選擇closing

opencv 型態學運算

opencv 型態學運算

  1. import cv2
  2. img=cv2.imread('close1.png')
  3. cv2.imshow('img0',img)
  4. kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
  5. dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
  6. cv2.imshow('close',dst4)
  7. dst5=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
  8. print(dst5)
  9. cv2.imshow('open',dst5)
  10. cv2.waitKey(0)
複製代碼

opencv 型態學運算

opencv 型態學運算


 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2021-4-13 14:20 , Processed in 0.056205 second(s), 24 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表