当前位置:   article > 正文

OpenCV(8)-OpenCV中的形态学_opencv获取形态学卷积核

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)
  • 1
  • 2

自适应阈值二值化

  • 全局二值化弊端:由于光照不均匀以及阴影的存在,只有一个阈值会使得在阴影处的白色被二值化成黑色
  • 使用自适应阈值二值化即可解决
  • 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)
  • 1

腐蚀

在这里插入图片描述
在这里插入图片描述

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

获得形态学卷积核

  • 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))
  • 1
  • 卷积核大小与腐蚀与膨胀的效果密切相关!

膨胀

在这里插入图片描述
在这里插入图片描述

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

开运算

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

在这里插入图片描述

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

闭运算

  • 闭运算 = 膨胀(先) + 腐蚀(后)
    在这里插入图片描述

  • 能消除内部噪点

  • morphlogogyEx(img,MORPH_CLOSE,kernel)

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

形态学梯度

  • 梯度 = 原图 - 腐蚀

在这里插入图片描述

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

顶帽运算

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

黑帽操作

  • 黑帽 = 原图 - 闭运算
  • 就剩下内部噪点了
  • morphlogogyEx(img,MORPH_BLACKHAT,kernel)
dst = cv2.morphlogogyEx(img,cv2.MORPH_BLACKHAT,kernel)
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/86633
推荐阅读
相关标签
  

闽ICP备14008679号