OpenCV 形态学处理

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

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

图像腐蚀

  • 概念
    OpenCV 形态学处理_第1张图片
  • 原理
    OpenCV 形态学处理_第2张图片
  • 函数 erode
kernel = np.ones((5,5),np.uint8)		#numpy库生成1数组,数据类型为整形 
img2 = cv2.erode(img,kernel,iterations)		#迭代次数,默认为1
  • 处理结果
    OpenCV 形态学处理_第3张图片

图像膨胀

  • 原理

膨胀又叫逆腐蚀。

先腐蚀后膨胀,可用于降噪。
OpenCV 形态学处理_第4张图片

  • 函数 dilate
kernel = np.ones((5,5),np.uint8)
img2 = cv2.dilate(img,kernel,iterations)
  • 处理结果
    OpenCV 形态学处理_第5张图片

开运算

我们把先腐蚀后膨胀的操作合并为开运算。

  • 原理
    OpenCV 形态学处理_第6张图片
    OpenCV 形态学处理_第7张图片
  • 函数 morpholoyEx
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
#opening,开运算结果		cv2.MORPH_OPEN 开运算关键字
  • 处理结果
    OpenCV 形态学处理_第8张图片

闭运算

我们把先膨胀后腐蚀称为闭运算。

  • 原理
    OpenCV 形态学处理_第9张图片
    OpenCV 形态学处理_第10张图片
  • 函数 morphologyEx
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
#闭运算结果及关键字
  • 处理结果
    OpenCV 形态学处理_第11张图片

梯度操作

膨胀图像 - 腐蚀图像 = 梯度图像

  • 原理
    结果也叫轮廓图像
    OpenCV 形态学处理_第12张图片
  • 函数 morphologyEx
kernel = np.ones((5,5),np.uint8)
result = cv2.morphologyEx(img,cv2MORPH_GRADIENT,kernel)
  • 处理结果
    OpenCV 形态学处理_第13张图片

礼帽运算

原始图像 - 开运算图像 = 噪声图像

  • 效果OpenCV 形态学处理_第14张图片
  • 函数 morphologyEx
kernel = np.ones((5,5),np.uint8)
result = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

黑帽处理

闭运算图像 - 原始图像 = 黑帽图像

  • 效果
    OpenCV 形态学处理_第15张图片
  • 函数 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()

你可能感兴趣的:(Python,OpenCV,opencv,计算机视觉,python,算法)