OpenCV(8)-OpenCV中的形态学

OpenCV中的形态学

形态学概述

  • 什么是形态学处理:
    • 基于图像形态进行处理的一些基本方法
  • 这些处理方法基本上是对二进制图像进行处理
  • 卷积核决定这图像处理后的效果
  • 基本方法:
    • 腐蚀与膨胀
    • 开运算
    • 闭运算
    • 顶帽
    • 黑帽

图像二值化

  • 将图像的每个像素变成两种值,如0,255
  • 全局二值化:全局使用相同的阈值进行二值化
  • 局部二值化:分成很多小块进行二值化

全局二值化

  • threshold(img,thresh,maxVal,type)
    • img:图像,最好是灰度图
    • thresh:阈值
    • maxVal:超过阈值,替换成maxVal
    • thresholdType:
      • THRESH_BINARY 和THRESH_BINARY _INV(加INV是将二值反过来输出)
      • THRESH_TRUNC
      • THRESH_TOZERO和THRESH_TOZERO_INV
#有两个返回值:执行结果ret及返回图像dst
ret,dst = cv2.threshold(img,180,255,cv2.THRESH_BINARY)

自适应阈值二值化

  • 全局二值化弊端:由于光照不均匀以及阴影的存在,只有一个阈值会使得在阴影处的白色被二值化成黑色
  • 使用自适应阈值二值化即可解决
  • adaptiveThreshold(img,maxVal,adaptiveMethod,type,blockSize,C)
    • adaptiveMethod:计算阈值的方法
      • ADAPTIVE_THRESH_MEAN_C:计算临近区域的平均值
      • ADAPTIVE_THRESH_GAUSSIAN_C:高斯窗口加权平均值
    • type:
      • THRESH_BINARY
      • THRESH_BINARY _INV
    • blockSize:临近区域的大小
    • C:常量,应从计算出的平均值或加权平均值中减去
dst =cv2.daptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,3,0)

腐蚀

OpenCV(8)-OpenCV中的形态学_第1张图片
OpenCV(8)-OpenCV中的形态学_第2张图片

  • 会缩小一圈
  • erode(img,kernel,iterations = 1)
    • iterations腐蚀次数
kernel = np.ones((3,3),np.uint8)
dst = cv2.erode(img,kernel,iterations = 1)

获得形态学卷积核

  • getStructuringElement(type,size)
    • type:卷积核类型
      • MORPH_RECT 矩形卷积核 全为1
      • MORPH_ELLIPSE 椭圆形卷积核 内切圆(实心)为1
      • MORPH_CROSS 十字架卷积核 过中心点的十字架为1
    • size:一般情况下值为(3,3),(5,5),(7,7)…
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
  • 卷积核大小与腐蚀与膨胀的效果密切相关!

膨胀

OpenCV(8)-OpenCV中的形态学_第3张图片
OpenCV(8)-OpenCV中的形态学_第4张图片

  • dilate(img,kernel,iterations = 1)
    • iterations膨胀次数
dst = cv2.dilate(img,kernel,iterations = 1)

开运算

  • 开运算 = 腐蚀(先) + 膨胀(后)

OpenCV(8)-OpenCV中的形态学_第5张图片

  • 能消除外部噪点
  • morphlogogyEx(img,MORPH_OPEN,kernel)
    • MORPH_OPEN:形态学的开运算
#可以先调用一次腐蚀操作,再调用一次膨胀操作实现
#也可以直接调用开运算API实现
dst = cv2.morphlogogyEx(img,cv2.MORPH_OPEN,kernel)

闭运算

  • 闭运算 = 膨胀(先) + 腐蚀(后)
    OpenCV(8)-OpenCV中的形态学_第6张图片

  • 能消除内部噪点

  • morphlogogyEx(img,MORPH_CLOSE,kernel)

    • MORPH_CLOSE:形态学的闭运算
dst = cv2.morphlogogyEx(img,cv2.MORPH_CLOSE,kernel)

形态学梯度

  • 梯度 = 原图 - 腐蚀

OpenCV(8)-OpenCV中的形态学_第7张图片

  • morphlogogyEx(img,MORPH_GRADIENT,kernel)
dst = cv2.morphlogogyEx(img,cv2.MORPH_GRADIENT,kernel)
  • kernel越小,腐蚀程度越小,用原图减去后的白色边缘越清晰;f反之kernel越大,白色越壮实

顶帽运算

  • 顶帽 = 原图 - 开运算
  • 就剩下外部噪点了
  • morphlogogyEx(img,MORPH_TOPHAT,kernel)
dst = cv2.morphlogogyEx(img,cv2.MORPH_TOPHAT,kernel)

黑帽操作

  • 黑帽 = 原图 - 闭运算
  • 就剩下内部噪点了
  • morphlogogyEx(img,MORPH_BLACKHAT,kernel)
dst = cv2.morphlogogyEx(img,cv2.MORPH_BLACKHAT,kernel)

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