OpenCV---膨脹與腐蝕
阿新 • • 發佈:2018-07-07
unknown strong 圓形 14. waitkey 不同 tco detail 第一個
膨脹
腐蝕
一:膨脹實現dilate
import cv2 as cv import numpy as np def dilate_demo(image): #膨脹 print(image.shape) gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU) cv.imshow("binary",binary) kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5)) dst = cv.dilate(binary,kernel) cv.imshow("dilate_demo",dst) src = cv.imread("./5.png") #讀取圖片 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #創建GUI窗口,形式為自適應 cv.imshow("input image",src) #通過名字將圖像和窗口聯系 dilate_demo(src) cv.waitKey(0) #等待用戶操作,裏面等待參數是毫秒,我們填寫0,代表是永遠,等待用戶操作 cv.destroyAllWindows() #銷毀所有窗口
二:實現腐蝕erode
def erode_demo(image): #腐蝕 print(image.shape) gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU) cv.imshow("binary",binary) kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3)) #可以修改卷積核大小來增加腐蝕效果,越大腐蝕越強dst = cv.erode(binary,kernel) cv.imshow("erode_demo",dst) src = cv.imread("./5.png") #讀取圖片 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #創建GUI窗口,形式為自適應 cv.imshow("input image",src) #通過名字將圖像和窗口聯系 erode_demo(src) cv.waitKey(0) #等待用戶操作,裏面等待參數是毫秒,我們填寫0,代表是永遠,等待用戶操作 cv.destroyAllWindows() #銷毀所有窗口
kernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
相關知識補充
(一)可以看做膨脹是將白色區域擴大,腐蝕是將黑色區域擴大
(二)可以不進行灰度處理,對彩色圖片進行處理
(1)膨脹
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5)) dst = cv.dilate(src,kernel) cv.imshow("result",dst)
(2)腐蝕
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5)) dst = cv.erode(src,kernel) cv.imshow("result",dst)
(三)getStructuringElement方法
推文:OpenCV中獲取不同形狀的結構元素getStructuringElement
自定義一個結構元素kernel,要聲明一個Mat,然後對Mat的元素賦值;這種方法靈活但略顯復雜
OpenCV提供了一個函數getStructuringElement,可以獲取常用的結構元素的形狀:矩形(包括線形)、橢圓(包括圓形)及十字形。
getStructuringElement的內部並沒有什麽優化實現,只是封裝了一下功能。其原理同樣是聲明一個Mat,然後求形狀,指定Mat的值。
十字形為單線寬。
總之:getStructuringElement是一種更加簡便的方法實現一個kernel
MORPH_RECT, MORPH_ELLIPSE, MORPH_CROSS
參數:
cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
def getStructuringElement(shape, ksize, anchor=None): # real signature unknown; restored from __doc__
第一個參數shape:表示內核的形狀,有三種形狀可以選擇
矩形:MORPH_RECT;
交叉形:MORPH_CORSS;
橢圓形:MORPH_ELLIPSE;
第二個參數ksize:是內核的尺寸(n,n)
第三個參數anchor:錨點的位置
返回值:
getStructuringElement函數會返回指定形狀和尺寸的結構元素。
OpenCV---膨脹與腐蝕