zoukankan      html  css  js  c++  java
  • opencv形态学操作之腐蚀、膨胀

    1.腐蚀

    腐蚀的效果是把图片"变瘦",其原理是在原图的小区域内取局部最小值。因为是二值化图,只有0和255,所以小区域内有一个是0该像素点就为0:

    import cv2
    import numpy as np
    
    img = cv2.imread("666.jpg", 0)
    kernel = np.ones((3, 3), np.uint8)
    erodtion = cv2.erode(img, kernel, iterations=1)

     

     这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的。结构元素可以是矩形/椭圆/十字形,可以用cv2.getStructuringElement()来生成不同形状的结构元素,比如:

    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))  # 矩形结构
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))  # 椭圆结构
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))  # 十字形结构

    2.膨胀

    膨胀与腐蚀相反,取的是局部最大值,效果是把图片"变胖":

    import cv2
    import numpy as np
    
    img = cv2.imread("666.jpg", 0)
    kernel = np.ones((3, 3), np.uint8)
    erodtion = cv2.dilate(img, kernel, iterations=1)

     

     从上边的效果可以看出,先通过腐蚀将边角毛躁去掉再经过膨胀之后就可以大致复原没有毛躁的原图

    import cv2
    import numpy as np
    
    img = cv2.imread("666.jpg", 0)
    cv2.imshow("img", img)
    kernel = np.ones((2, 2), np.uint8)
    kerne2 = np.ones((7, 7), np.uint8)
    erodtion = cv2.erode(img, kernel, iterations=1)
    cv2.imshow("erodtion", erodtion)
    dilation = cv2.dilate(erodtion, kerne2, iterations=2)
    cv2.imshow("dilation", dilation)
    cv2.waitKey(-1)

  • 相关阅读:
    Android基础之使用Fragment控制切换多个页面
    如何进行fragment中的来回切换?
    【Android】保存Fragment切换状态
    ViewPager+Fragment的结合使用,实现QQ界面的理解
    android 写文件权限
    Android文件操作
    [转]Android读写文件
    【275】◀▶ Python 控制语句说明
    【274】Python 相关问题
    【273】利用ArcPy建立处理数据的脚本
  • 原文地址:https://www.cnblogs.com/answerThe/p/11451412.html
Copyright © 2011-2022 走看看