形态学主要处理二值图像(0黑1白)。
kernel = np.ones((5,5),np.uint8) #numpy库生成1数组,数据类型为整形
img2 = cv2.erode(img,kernel,iterations) #迭代次数,默认为1
膨胀又叫逆腐蚀。
kernel = np.ones((5,5),np.uint8)
img2 = cv2.dilate(img,kernel,iterations)
我们把先腐蚀后膨胀的操作合并为开运算。
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
#opening,开运算结果 cv2.MORPH_OPEN 开运算关键字
我们把先膨胀后腐蚀称为闭运算。
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
#闭运算结果及关键字
膨胀图像 - 腐蚀图像 = 梯度图像
kernel = np.ones((5,5),np.uint8)
result = cv2.morphologyEx(img,cv2MORPH_GRADIENT,kernel)
原始图像 - 开运算图像 = 噪声图像
kernel = np.ones((5,5),np.uint8)
result = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
闭运算图像 - 原始图像 = 黑帽图像
kernel = np.ones((5,5),np.uint8)
result = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
1 import cv2
2 import numpy as np
3 import matplotlib.pyplot as plt
4
5 cap = cv2.VideoCapture(0)
6
7 while True:
8 _,frame = cap.read()
9 hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) #颜色格式转换
10
11 lower_red = np.array([100,100,0])
12 upper_red = np.array([255,255,255])
13
14 mask = cv2.inRange(hsv,lower_red,upper_red)
15 res = cv2.bitwise_and(frame,frame,mask = mask)
16 #原始图像与遮罩图像进行与运算
17
18 kernel = np.ones((5,5),np.uint8)
19 erosion = cv2.erode(mask,kernel,iterations = 1)
20 dilation = cv2.dilate(mask,kernel,iterations = 1)
21
22 opening = cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernel)
23 closing = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)
24
25 cv2.imshow('mask',mask)
26 cv2.imshow('opening',opening)
27 cv2.imshow('closing',closing)
28
29 k = cv2.waitKey(5) & 0xFF
30 if k == 27:
31 break
32
33 cv2.destroyAllWindows()
34 cap.release()