什么事形态学处理
基于图像形态进行处理的一些基本方法;
这些处理方法基本是对二进制图像进行处理;
卷积核决定着图像出来后的效果。
一 图像二值化
什么是二值化
将图像的每个像素变成两种值,如0,255.
全局二值化。
局部二值化。
threshold API
threshold(img,thresh,maxVal,type)
img:图像,最好是灰度图
thresh:阈值
maxVal:超过阈值,替换成maxVal
THRESH_BINARY和THRESH_BINARY_INV
THRESH_TRUNC
THRESH_TOZERO和THRESH_TOZERO_INV
import cv2
import numpy as np
img=cv2.imread('./2037551.jpg')
img1=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,dst=cv2.threshold(img,180,255,cv2.THRESH_BINARY)
cv2.imshow('img',img)
cv2.imshow('gray',img1)
#cv2.imshow('bin',bin)
cv2.waitKey(0)
二 阈值类型
thresholdType
三 自适应阈值
由于光照不均匀以及阴影的存在,只有一个阈值会使得在阴影处的白色被二值化成黑色。
adaptiveThresholdAPI
adaptiveThreshold(img,maxVal,adaptiveMethod,type,blockSie,C)
adaptiveMethod:计算阈值的方法
blockSize:邻近区域的大小
C:常量,应从计算出的平均值或加权平均值中减去;
adaptiveMethod
计算阈值的方法
ADAPTIVE_THRESH_MEAN_C:计算领近区域的平均值
ADAPIVE_THRESH_GAUSSIAN_C:高斯窗口加权平均值
Type:THRESH_BINARY,THRESH_BINARY_INV
import cv2
import numpy as np
img=cv2.imread('./2037551.jpg')
img1=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst=cv2.adaptiveThreshold(img1,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV,11,0)
print(dst.shape)
cv2.imshow('img',img)
cv2.imshow('img1',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)
四 腐蚀
1 腐蚀运算
2 腐蚀效果
3 腐蚀API
erode(img,kernel,iterations=1)
import cv2
import numpy as np
img=cv2.imread('./2037551.jpg')
kernel=np.ones((3,3),np.uint8)
dst=cv2.erode(img,kernel,iterations=1)
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)
六 获取形态学卷积核
卷积核的类型
getStructuringElement(type,size)
Size值为:(3:3)、(5,5)...
MORPH_RECT
MORPH_ELLIPSE
MORPH_CROSS
七 OPenCV 膨胀
膨胀运算
1 膨胀效果
2 膨胀API
dilate(img,kernel,iterations=1)
问题
如果是白底黑字,进行腐蚀与膨胀后会怎样?
卷积核是否可以设置为全0?
八 开运算
开运算=腐蚀+膨胀
开运算效果
开运算API
morphologyEx(img,EORPH_OPEN,kernel)
import cv2
import numpy as np
img=cv2.imread('./2037551.jpg')
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))
#dst=cv2.erode(img,kernel,iterations=1)
#膨胀
#dst1=cv2.dilate(img,kernel,iterations=1)
dst1=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
#cv2.imshow('dst',dst)
cv2.imshow('dst1',dst1)
cv2.waitKey(0)
九 闭运算
闭运算效果
闭运算API
morphology(img,MORPH_CLOSE,kernel)
十 形态学剃度
梯度=原图-腐蚀
梯度效果图
梯度API
morphologyEx(img,MORPH_GRADIENT,kernel)
import cv2
import numpy as np
img=cv2.imread('./2037551.jpg')
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))
#梯度
dst1=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow('img',img)
cv2.imshow('dst',dst1)
cv2.waitKey(0)
十一 顶帽运算
顶帽=原图-开运算
顶帽效果图
顶帽API
morphologyEx(img,MORPH_TOPHAT,kernel)
import cv2
import numpy as np
img=cv2.imread('./2037551.jpg')
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(19,19))
#顶帽
dst1=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('img',img)
cv2.imshow('dst',dst1)
cv2.waitKey(0)
十二 黑帽运算
黑帽=原图-闭运算
黑帽效果图
黑帽API
morphologyEx(img,MORPH_BLACKHAT,kernel)
import cv2
import numpy as np
img=cv2.imread('./2037551.jpg')
kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(19,19))
#顶帽
dst1=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('img',img)
cv2.imshow('dst',dst1)
cv2.waitKey(0)