zoukankan      html  css  js  c++  java
  • opencv 实现图像形态学操作 膨胀和腐蚀 开闭运算 形态学梯度 顶帽和黑帽

    图像膨胀和腐蚀

    图解

    膨胀和腐蚀理解

    原理及python实现

    更多内容:图像膨胀和腐蚀原理及python实现

    opencv中膨胀和腐蚀函数

    dilation = cv.dilate(img, kernel) # 膨胀
    erosion = cv.erode(img, kernel) # 腐蚀

    实验

    import cv2 as cv
    import numpy as np
    
    img = cv.imread('j.png')
    img = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    ret,th = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
    # 参数1:源图;参数2:核大小;参数3:腐蚀次数
    erode1 = cv.erode(th,(3,3),10)  # 腐蚀
    dilate1 = cv.dilate(th,(3,3),10) # 扩张
    
    result = np.hstack((th,erode1,dilate1))
    
    cv.imshow('result',result)
    cv.waitKey(0)
    cv.destroyAllWindows()
    
    

    输出结果类似于上图

    cv.erode() 函数参数2:kernel讲解

    这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的。结构元素可以是矩形/椭圆/十字形,可以用cv.getStructuringElement()来生成不同形状的结构元素,比如:
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5)) # 矩形结构
    kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (5, 5)) # 椭圆结构
    kernel = cv.getStructuringElement(cv.MORPH_CROSS, (5, 5)) # 十字形结构
    图解生成的各种结构元素

    图像开闭运算

    原理

    开运算:先腐蚀,再膨胀。有效消除物体外的白色噪声。
    闭运算:先膨胀,后腐蚀。有效消除物体内的黑色噪声。

    python实现

    更多内容:图像开闭运算原理及python实现

    matlab实现

    更多内容:图像开闭运算原理及matlab实现

    实验

    import cv2 as cv
    import numpy as np
    
    img = cv.imread('paojie_g.jpg',0)
    ret,th = cv.threshold(img,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
    
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))  # 定义结构元素
    
    opening = cv.morphologyEx(th, cv.MORPH_OPEN, kernel)  # 开运算
    closing = cv.morphologyEx(th, cv.MORPH_CLOSE, kernel) # 闭运算
    
    result = np.hstack((th,opening,closing))
    
    cv.imshow('result',result)
    cv.waitKey(0)
    cv.destroyAllWindows()
    

    实验结果

    左图:原图;中图:开运算结果;右图:闭运算结果

    形态学梯度

    定义

    形态学梯度:膨胀图减去腐蚀图,dilation - erosion,这样会得到物体的轮廓:
    左图:原图;右图:形态学梯度得到的图像轮廓

    其它形态学运算

    顶帽:原图减去开运算后的图:src - opening
    tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
    黑帽:闭运算后的图减去原图:closing - src
    blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)

  • 相关阅读:
    c#泛型的使用
    关于Asp.net无法写入输出文件的原因
    利用OLEDB导出数据到Excel
    中秋祝福
    C#获取当前域用户名
    【程序员必读】骨灰级程序员20条编程经验
    SQL SERVER 2005无法远程连接的问题
    ASP.Net 实现伪静态方法及意义
    js+ajax获取文件大小
    C#遍历指定文件夹中的所有文件
  • 原文地址:https://www.cnblogs.com/wojianxin/p/12600241.html
Copyright © 2011-2022 走看看