没看过前文也没有关系,了解腐蚀和膨胀就行。本文紧接前文图像腐蚀与膨胀。
梯度计算
梯度计算就是膨胀过后的图像减去腐蚀处理过后的图像。图像腐蚀就是消除图像的边缘,图像膨胀就是把图像边缘扩大一点。
这样得到的就是图像的轮廓。
在OpenCV中,梯度计算方法也被包括在形态学方法cv2.morphologyEx(src,op,kernel)中
src为输入图像
如果要进行梯度运算,参数设置op=cv2.MORPH_GRADIENT
kernel为采用的卷积核,本文采用卷积核为3*3的矩阵。
import cv2
import numpy as np
#定义了一个展示图片的方法
def cv_show(title,img):
cv2.imshow(title,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
return
#读取图片
img = cv2.imread('circle.png')
kernel = np.ones((3,3),dtype = np.uint8)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT,kernel)
cv_show('gradient',gradient)
原图与输出对比
原图'circle.png'
输出图像:
大家也可以用自己的二值图试试,本文的图像就是windows自带的画图软件画的,画一个黑色的底和一个白色的圆就行,二值图的意思是一种由黑色和白色两种颜色组成的图像,其中只有两个像素值。
礼帽
礼帽就是原始图像减去开运算之后的图像
同样包括在形态学方法cv2.morphologyEx(src,op,kernel)中,
此时参数op = cv2.MORPH_TOPHAT
import cv2
import numpy as np
def cv_show(title,img):
cv2.imshow(title,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
return
img = cv2.imread('Hello.png')
kernel = np.ones((3,3),dtype = np.uint8)
tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)#高帽找刺
cv_show('tophat',tophat)
原图和结果对比:
原图(Hello.png)
结果:
前文说过,开运算就是给图像把毛刺去了,那么礼帽就是原始图像减去开运算图像,得出去掉的毛刺是啥。
黑帽
运算则是将原始图像与其闭运算的差值结果,即原始图像减去其闭运算结果。
此时参数op = CV2.MORPH_BALCKHAT
import cv2
import numpy as np
def cv_show(title,img):
cv2.imshow(title,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
return
img = cv2.imread('dongdong.png')
kernel = np.ones((3,3),dtype = np.uint8)
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)#黑帽找洞
cv_show('blackhat',blackhat)
前文说过闭运算能够去掉图片中的洞洞,而黑帽就是找出这些洞洞。
图像前后对比
原图‘dongdong.png'
处理后
可以看出洞洞部分被突出显示了。