首页 > 其他 > 详细

OpenCV 中 getStructuringElement() 与 morphologyEx() 函数用法

时间:2020-12-13 08:10:02      阅读:445      评论:0      收藏:0      [点我收藏+]

getStructuringElement() 与 morphologyEx() 两个函数使用时,经常是放在一起的,后者函数中用到的参数是由前者提供

  • cv2.getStructuringElement()
    • 返回一个特定大小与形状的结构元素用于形态学操作,生成的结构学元素进一步传入 Opencv 的 erode、dilate、morphologyEx 函数中完成形态学操作,除此之外,也可以自己构建一个任意形状的二进制掩码,作为结构元素

参数详讲

  • shape: 元素形状,OpenCV 中提供了三种,MORPH_RECT(矩阵)MORPH_CORSS(交叉形状)MORPH_ELLIPSE(椭圆)
  • ksize ,结构元素的大小;
  • anchor,元素内的描点位置,默认为 (-1,-1)表示形状中心;值得注意的时,只有 MORPH-CROSS 形状依赖 描点位置,其它情况 描点仅调节其他形态运算结果偏移了多少

使用命令

retval	=	cv.getStructuringElement(	shape, ksize[, anchor]	)

morphologyEx()

语法命令

dst	=cv.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]	)

对图像进行形态学转换;利用最基本腐蚀、膨胀形态学操作;所有操作可直接在源图像上实现,针对多通道图像,其中每个通道都是独立处理,这个方法常用来提取图像中某类不规则形状的区域

参数解析

  • src ,预处理的图像;
  • op ,形态操作的类型,可选择下面列表中的一种类型,一般参数多选为 cv2.MORPH_CLOSE
  • 技术分享图片
  • kernel: 结构元素,来自于 getStructuringElement 方法

针对上面这两种方法的用法,这里给一个例子,提取下方图片中水印部分,也就是中间黑色圆环,和下方字体

技术分享图片

例子代码用到的代码如下

import cv2
import numpy as np

if __name__ ==‘__main__‘:
    img_path = "F:/Data/Ceshi1/shuiyin.jpg"
    im = cv2.imread(img_path)

    gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

    background = gray.copy()
    for i in range(1,5):
        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(2*i+1,2*i+1))
        # print(‘kernel size is ‘,kernel)
        background = cv2.morphologyEx(background,cv2.MORPH_CLOSE,kernel)
        background = cv2.morphologyEx(background,cv2.MORPH_CLOSE,kernel)

    cv2.namedWindow(‘diff‘,cv2.WINDOW_FREERATIO) # 获取图像中前景背景之差
    cv2.imshow(‘diff‘,background)

代码中用了一个 for 循环,用来控制提取图像不规则形状的次数,可以根据结果确定一个比较好的值,最终实验证明了 4 为最合适的

最终提取结果如下

技术分享图片

OpenCV 中 getStructuringElement() 与 morphologyEx() 函数用法

原文:https://www.cnblogs.com/zeroing0/p/14127411.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!