OpenCV的腐蚀、膨胀等形态学方法

1、图像的腐蚀与膨胀

在这里插入图片描述
代码测试:
腐蚀:

# -*- coding: utf-8 -*-
# @Time    : 2021/8/13        
# @Author  : ZYh
"""
Introduction:
腐蚀操作:
    dst = cv2.erode(src, kernel, anchor, iterations, borderType, borderValue)
    参数说明:
        kernel->腐蚀使用的核
        anchor->可选参数,核的锚点位置
        iterations->可选参数,腐蚀操作的迭代次数,默认值为1
        borderType->可选参数,边界样式,建议默认
        borderValue->可选参数,边界值,建议默认
"""
import cv2 as cv
import numpy as np

image1 = cv.imread('cactus.jpg')
image2 = cv.imread('spider.png')
# 创建3 × 3 数组作为核
k = np.ones((5, 5), np.uint8)
cv.imshow('image1', image1)
cv.imshow('image2', image2)
image1_erode = cv.erode(image1, k)
image2_erode = cv.erode(image2, k)
cv.imshow('image1_erode', image1_erode)
cv.imshow('image2_erode', image2_erode)

cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述
膨胀:

# -*- coding: utf-8 -*-
# @Time    : 2021/8/15 
# @Author  : ZYh
"""
Introduction:
膨胀操作:
    dst = cv2.dilate(src, kernel, anchor, iterations, borderType, borderValue)
"""
import cv2 as cv
import numpy as np

image1 = cv.imread('spider.png')
image2 = cv.imread('sunset.jpg')

k = np.ones((5, 5), np.uint8)

cv.imshow('image1', image1)
cv.imshow('image2', image2)
cv.imshow('image1_dilate', cv.dilate(image1, k))
cv.imshow('image2_dilate', cv.dilate(image2, k))

cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述

2、图像开运算、闭运算

开运算:先对图像进行腐蚀操作,再进行膨胀操作

# -*- coding: utf-8 -*-
# @Time    : 2021/8/15  
# @Author  : ZYh
"""
Introduction:
开运算:
    作用:抹除图像外部细节(或者噪声)
    原理:先腐蚀(erode)再膨胀(dilate)
"""
import cv2 as cv
import numpy as np

image = cv.imread('nigella.png')

k = np.ones((5, 5), np.uint8)
cv.imshow('image', image)
cv.imshow('erode', cv.erode(image, k))
cv.imshow('Open_Operation', cv.dilate(cv.erode(image, k), k))
cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述

3、其他形态学方法

OpenCV提供了一个**morphologyEx()**形态学方法,包含了所有常用的运算
在这里插入图片描述

# -*- coding: utf-8 -*-
# @Time    : 2021/8/15
# @Author  : ZYh
"""
Introduction:
形态学方法:
    dst = cv2.morphologyEx(src, op, kernel, anchor, iterations, borderType, borderValue)
    参数:
        op->操作类型,详见下表

    参数值                         含义
    cv2.MORPH_ERODE             腐蚀操作
    cv2.MORPH_DILATE            膨胀操作
    cv2.MORPH_OPEN              开运算,先腐蚀再膨胀
    cv2.MORPH_CLOSE             闭运算,先膨胀再腐蚀
    cv2.MORPH_GRADIENT          梯度运算,膨胀图减腐蚀图,可以得出简易的轮廓
    cv2.MORPH_TOPHAT            顶帽运算,原始图像减开运算图像
    cv2.MORPH_BLACKHAT          黑帽运算,闭运算图像减原始图像
"""
import cv2 as cv
import numpy as np

image = cv.imread('spider.png')

k = np.ones((5, 5), np.uint8)
cv.imshow('image', image)
# 通过梯度运算画出小蜘蛛的轮廓(梯度运算:得到不精准、大致的轮廓图像)
cv.imshow('GRADIENT', cv.morphologyEx(image, cv.MORPH_GRADIENT, k))
# 通过顶帽运算画出小蜘蛛的腿(顶帽运算:原图 - 开运算)
cv.imshow('TOPHAT', cv.morphologyEx(image, cv.MORPH_TOPHAT, k))
# 通过黑帽运算画出小蜘蛛身上的花纹(黑帽运算:闭运算 - 原图)
image_pattern = cv.imread('spider2.png')
cv.imshow('image_pattern', image_pattern)
cv.imshow('TOPHAT', cv.morphologyEx(image_pattern, cv.MORPH_BLACKHAT, k))

cv.waitKey()
cv.destroyAllWindows()

在这里插入图片描述

4、总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值