zoukankan      html  css  js  c++  java
  • Python+OpenCV图像处理之腐蚀与膨胀

    形态学操作其实就是改变物体的形状,一般作用于二值化图,来连接相邻的元素或分离成独立的元素。

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

    膨胀的原理是在原图的小区域内取局部最大值

     腐蚀与膨胀的python实现

    import cv2
    
    """
    腐蚀算法:变瘦
        用kernel,扫描图像的每一个像素;用kernel与其覆盖的二值图像做 “与” 操作;如果都为1,结果图像的该像素为1;否则为0.
        结果:使二值图像减小一圈
    """
    def erode_demo(image):
        print(image.shape)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
        cv2.imshow("binary", binary)
        kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
        dst = cv2.erode(binary, kernel)
        cv2.imshow("erode", dst)
    
    
    """
    膨胀算法:变胖
        用kernel,扫描图像的每一个像素;用kernel与其覆盖的二值图像做 “与” 操作;如果都为0,结果图像的该像素为0;否则为1.
        结果:使二值图像扩大一圈
    """
    def dilate_demo(image):
        print(image.shape)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY)
        cv2.imshow("binary", binary)
        kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
        dst = cv2.dilate(binary, kernel)
        cv2.imshow("dilate", dst)
    
    
    if __name__ == "__main__":
        img = cv2.imread("img.jpg")
        cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
        cv2.imshow("input image", img)
        erode_demo(img)
        dilate_demo(img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    # img = cv2.imread("image/123.jpg")
    # cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
    # cv2.imshow("input image",img)
    # kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    # dst = cv2.erode(img, kernel)       # 腐蚀
    # dst1 = cv2.dilate(img, kernel)     # 膨胀
    # cv2.imshow("erode result", dst)
    # cv2.imshow("dilate result", dst1)
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()

    运行结果如下

    可以不进行灰度处理,直接对彩色图像进行腐蚀和膨胀处理,结果如下

    腐蚀函数cv2.erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)         

    膨胀函数cv2.dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

    获取不同形状的结构元素cv2.getStructuringElement(shape, ksize, anchor=None),返回指定形状和尺寸的结构元素

    参数shape:表示内核的形状,矩形:MORPH_RECT    十字形:MORPH_CORSS      椭圆形:MORPH_ELLIPSE;

    参数ksize:是内核的尺寸(n,n)

    参数anchor:锚点的位置

  • 相关阅读:
    SQL Server, Timeout expired.all pooled connections were in use and max pool size was reached
    javascript 事件调用顺序
    Best Practices for Speeding Up Your Web Site
    C语言程序设计 使用VC6绿色版
    破解SQL Prompt 3.9的几步操作
    Master page Path (MasterPage 路径)
    几个小型数据库的比较
    CSS+DIV 完美实现垂直居中的方法
    由Response.Redirect引发的"Thread was being aborted. "异常的处理方法
    Adsutil.vbs 在脚本攻击中的妙用
  • 原文地址:https://www.cnblogs.com/qianxia/p/11105883.html
Copyright © 2011-2022 走看看