OpenCV 形态学处理

形态学主要处理二值图像(0黑1白)。

1先蚀后胀
2先胀后蚀
1去噪声
2去黑点
减腐蚀
3减
3
4减
4
腐蚀
膨胀
开运算
闭运算
轮廓图像
原始图像
噪声图像
黑点图像

图像腐蚀

  • 概念
    在这里插入图片描述
  • 原理
    在这里插入图片描述
  • 函数 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版权协议,转载请附上原文出处链接和本声明。