形态学主要处理二值图像(0黑1白)。
图像腐蚀
- 概念
- 原理
- 函数 erode
kernel = np.ones((5,5),np.uint8) #numpy库生成1数组,数据类型为整形
img2 = cv2.erode(img,kernel,iterations) #迭代次数,默认为1
- 处理结果
图像膨胀
- 原理
膨胀又叫逆腐蚀。
先腐蚀后膨胀,可用于降噪。
- 函数 dilate
kernel = np.ones((5,5),np.uint8)
img2 = cv2.dilate(img,kernel,iterations)
- 处理结果
开运算
我们把先腐蚀后膨胀的操作合并为开运算。
- 原理
- 函数 morpholoyEx
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
#opening,开运算结果 cv2.MORPH_OPEN 开运算关键字
- 处理结果
闭运算
我们把先膨胀后腐蚀称为闭运算。
- 原理
- 函数 morphologyEx
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
#闭运算结果及关键字
- 处理结果
梯度操作
膨胀图像 - 腐蚀图像 = 梯度图像
- 原理
结果也叫轮廓图像 - 函数 morphologyEx
kernel = np.ones((5,5),np.uint8)
result = cv2.morphologyEx(img,cv2MORPH_GRADIENT,kernel)
- 处理结果
礼帽运算
原始图像 - 开运算图像 = 噪声图像
- 效果
- 函数 morphologyEx
kernel = np.ones((5,5),np.uint8)
result = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
黑帽处理
闭运算图像 - 原始图像 = 黑帽图像
- 效果
- 函数 morphologyEx
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()
版权声明:本文为qq_43161186原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。