開操作:先腐蝕後膨脹 作用:刪除小的干擾塊
閉操作:先膨脹後腐蝕
先看一下開操作的運用:
應用一:去除背景雜線
首先將圖片處理成二值圖像
src = cv.imread("D:/pythonTest/img/16.jpg")
gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
cv.imshow("binary",binary)
我們需要把橫線去除,單獨顯示出字符。這在圖片背景預處理方面非常有用。
二、進行開操作
k = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
dst1 = cv.morphologyEx(binary,cv.MORPH_OPEN,k,iterations=1)
#dst2 = cv.morphologyEx(binary, cv.MORPH_CLOSE, k, iterations=1) #閉操作,暫不起作用
cv.imshow("result",dst1)
得到結果如下:
效果還是可以的。
應用二:提取水平線和垂直線
同樣先化成二值圖像:
src = cv.imread("D:/pythonTest/img/18.jpg")
gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
cv.imshow("binary",binary)
這裏選用的圖片是
然後進行用開操作提取水平線:
k = cv.getStructuringElement(cv.MORPH_RECT,(30,1))
dst1 = cv.morphologyEx(binary,cv.MORPH_OPEN,k,iterations=2)
cv.imshow("result",dst1)
可以看到這裏選用的模板形狀是(30,1)的矩形。得到如下結果:
如果將模板形狀改成(1,30),就可以得到垂直線了:
k = cv.getStructuringElement(cv.MORPH_RECT,(1,30))
dst1 = cv.morphologyEx(binary,cv.MORPH_OPEN,k,iterations=2)
cv.imshow("result",dst1)