zoukankan      html  css  js  c++  java
  • opencv学习记录之形态学操作

    腐蚀和膨胀是形态学运算的基础,将腐蚀和膨胀进行组合运算,通过不同的组合可以实现不同的效果,需要自行开发则可以实现开运算,闭运算,形态学梯度运算,礼帽运算

    黑帽运算,击中击不中运算等不同形式的运算

    函数形式

    dst = cv2.morphologyEx( src , op , kernel [ , anchor [ , interations [, borderType [ , borderValue]]]])

    dst 形态学操作之后的图像,与原图像类型大小相同

    src需要操作的图像,与之腐蚀和膨胀操作一样要求深度

    op代表操作类型

    类型 说明 含义 操作
    cv2.MORPH_ERODE 腐蚀 腐蚀 erode(src)
    cv2.MORPH_DILATE 膨胀 膨胀 dilate(src)
    cv2.MORPH_OPEN 开运算 先腐蚀后膨胀 dilate(erode(src))
    cv2.MORPH_CLOSE 闭运算 先膨胀后腐蚀 erode(dilate(src))
    cv2.MORPH_GRADIENT 形态学梯度运算 膨胀图减腐蚀图 dilate(src)-erode(src)
    cv2.MORPH_TOPHAT 顶帽运算 原始图像减开运算所得图像 src - open(src)
    cv2.MORPH_BLACKHAT 黑帽运算 闭运算所得图像减原始图像 close(src) - src
    cv2.MORPH_HITMISS 击中击不中 前景背景腐蚀运算的交集。仅仅支持CV_8UC1 二进制图像 intersection(erode(src) , erode(src1))

    kernel  anchor  interations  borderType  borderValue与cv2.erode()参数含义一致

    开运算

    将图像先腐蚀后膨胀,可以用于去噪、计数等

    1 import cv2                                                                       
    2 import numpy as np 
    3 img = cv2.imread("opening.bmp")
    4 k = np.ones((10,10) , np.uint8)
    5 r = cv2.morphologyEx(img , cv2.MORPH_OPEN , k) 
    6 cv2.imshow("img" , img)
    7 cv2.imshow("result" , r) 
    8 cv2.waitKey()
    9 cv2.destroyAllWindows()

    原图

    效果图

    闭运算

    先膨胀后腐蚀, 有助于关闭前景体内的小孔, 或者除去物体上的小黑点, 还可以用于不同前景图像进行连接

    1 import cv2                                                                       
    2 import numpy as np 
    3 img = cv2.imread("closing.bmp")
    4 k = np.ones((10,10) , np.uint8)
    5 r = cv2.morphologyEx( img , cv2.MORPH_CLOSE , k , iterations = 3) 
    6 cv2.imshow("img" , img)
    7 cv2.imshow("result" , r) 
    8 cv2.waitKey()
    9 cv2.destroyAllWindows()

    原图

     效果图

    形态学梯度运算

    用图像的膨胀图减去腐蚀图像   可以获取原始图像中前景图像的边缘

    1 import cv2                                                                       
    2 import numpy as np 
    3 img = cv2.imread("gradient.bmp" , cv2.IMREAD_UNCHANGED)
    4 k = np.ones((5,5) , np.uint8)
    5 r = cv2.morphologyEx(img , cv2.MORPH_GRADIENT , k) 
    6 cv2.imshow("img" , img)
    7 cv2.imshow("result" , r) 
    8 cv2.waitKey()
    9 cv2.destroyAllWindows()

    原图

     

     效果图

    顶帽运算

    用原始图像减去其开运算图像的操作   该操作可以获取图像的噪声信息, 或者得到比原始图像的边缘更亮的边缘信息

    1 import cv2                                                                       
    2 import numpy as np
    3 img = cv2.imread("tophat.bmp" , cv2.IMREAD_UNCHANGED)
    4 k = np.ones((5,5) , np.uint8)
    5 r = cv2.morphologyEx(img , cv2.MORPH_TOPHAT , k)
    6 cv2.imshow("img", img)
    7 cv2.imshow("result" , r)
    8 cv2.waitKey()
    9 cv2.destroyAllWindows()

    原图

    效果图

    黑帽运算

    是用闭运算图像减去原始图像的操作, 黑猫运算能够获取图像内壁的小孔,或前景色中的小黑点, 或者得到比原始图像的边缘

    更暗的边缘部分

    1 import cv2                                                                       
    2 import numpy as np 
    3 img = cv2.imread("blackhat.bmp" , cv2.IMREAD_UNCHANGED)
    4 k = np.ones((5,5) , np.uint8)
    5 r = cv2.morphologyEx(img , cv2.MORPH_BLACKHAT , k) 
    6 cv2.imshow("img" , img)
    7 cv2.imshow("result" , r) 
    8 cv2.waitKey()
    9 cv2.destroyAllWindows()

    原图

     

     效果图

  • 相关阅读:
    js面对对象和jQuery的使用
    感知器PLA算法
    MSP430G2系列学习笔记
    数学建模——规划问题
    51单片机学习(一)
    打靶法求解两点边值问题
    GAOT工具箱(遗传算法)的应用
    数学建模方法
    关于mysql 5.7 版本登录时出现错误 1045的随笔
    oracle复习(二)
  • 原文地址:https://www.cnblogs.com/miaorn/p/12288909.html
Copyright © 2011-2022 走看看