开操作:先腐蚀后膨胀 作用:删除小的干扰块
闭操作:先膨胀后腐蚀
先看一下开操作的运用:
应用一:去除背景杂线
首先将图片处理成二值图像
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)