zoukankan      html  css  js  c++  java
  • opencv_python学习笔记十四

    17 形态学转换

    形态学操作:

    腐蚀 膨胀 开运算  闭运算

    常用函数:

    cv2.erode()
    cv2.dilate()
    cv2.morphologyEx()

     

     

     

     

     

    1 腐蚀

    def erode(src, #源图像

    kernel, #腐蚀操作的内核

    dst=None, #输出图像

    anchor=None, #内核中心点

    iterations=None, #腐蚀次数

    borderType=None, #推断边缘类型

    borderValue=None) #边缘值

     

    2 膨胀

    def dilate(src, #源图像

    kernel, #腐蚀操作的内核

    dst=None, #输出图像

    anchor=None, #内核中心点

    iterations=None, #腐蚀次数

    borderType=None, #推断边缘类型

    borderValue=None) #边缘值

     

    3 开运算

    先腐蚀再膨胀

    4 闭运算

    先膨胀再腐蚀

    5 形态学梯度

    膨胀与腐蚀的差别

    6 礼帽

    原始图像与进行开运算进行后的图像的差

    7 黑帽

    进行闭运算之后得到的图像与原始图像的差

    函数原型

    def morphologyEx(src, #输入图像

    op, #形态学运算类型

    kernel, #内核

    dst=None, #输出图像

    anchor=None, #中心锚点

    iterations=None, #函数迭代次数

    borderType=None, #边界模式

    borderValue=None)#常数边界值

     

    结构化元素

    print(cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))
    print(cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)))
    print(cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)))

     

    输出结果如下:

    [[1 1 1 1 1]

     [1 1 1 1 1]

     [1 1 1 1 1]

     [1 1 1 1 1]

     [1 1 1 1 1]]

     

     

    [[0 0 1 0 0]

     [1 1 1 1 1]

     [1 1 1 1 1]

     [1 1 1 1 1]

     [0 0 1 0 0]]

     

     

    [[0 0 1 0 0]

     [0 0 1 0 0]

     [1 1 1 1 1]

     [0 0 1 0 0]

     [0 0 1 0 0]]

     

    示例代码如下:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2016/11/17 14:59
    # @Author  : Retacn
    # @Site    :
    # @File    : imageErode.py
    # @Software: PyCharm

    import cv2
    import numpy as np
    from matplotlib import pyplot as plt

    img=cv2.imread('../j.png')
    kernel=np.ones((5,5),np.uint8)


    #腐蚀
    dst1=cv2.erode(img,kernel,iterations=1)

    #膨胀
    dst2=cv2.dilate(img,kernel,iterations=1)

    #开运算
    dst3=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

    #闭运算
    dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

    #形态梯度学
    dst5=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

    #礼帽
    dst6=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

    #黑帽
    dst7=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)


    #正常
    plt.subplot(331),plt.imshow(img),plt.title('Normal')
    plt.xticks([]),plt.yticks([])
    #腐蚀
    plt.subplot(332),plt.imshow(dst1),plt.title('Erode')
    plt.xticks([]),plt.yticks([])
    #膨胀
    plt.subplot(333),plt.imshow(dst2),plt.title('Open')
    plt.xticks([]),plt.yticks([])
    #开运算
    plt.subplot(334),plt.imshow(dst3),plt.title('Close')
    plt.xticks([]),plt.yticks([])
    #闭运算
    plt.subplot(335),plt.imshow(dst4),plt.title('Dilate')
    plt.xticks([]),plt.yticks([])
    #形态学梯度
    plt.subplot(336),plt.imshow(dst5),plt.title('Gradient')
    plt.xticks([]),plt.yticks([])
    #礼帽
    plt.subplot(337),plt.imshow(dst6),plt.title('TopHat')
    plt.xticks([]),plt.yticks([])
    #黑帽
    plt.subplot(338),plt.imshow(dst7),plt.title('BlackHat')
    plt.xticks([]),plt.yticks([])

    #输出结构化元素
    print(cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))
    print(cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)))
    print(cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)))

    plt.show()

  • 相关阅读:
    开源网站
    Shape 与 InlineShape 的区别
    C#使用Word中的内置对话框实例
    C# Word 类库的深入理解
    C# 线程知识--使用ThreadPool执行异步操作
    C#如何以管理员身份运行程序
    C#的Enum——枚举
    MVC Action 返回类型[转]
    MVC3中Action返回类型ActionResult类型
    ASP.NET MVC 3.0 Controller基础
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194162.html
Copyright © 2011-2022 走看看