【OpenCV】(三)图像形态学操作

目录

 腐蚀与膨胀

 开运算和闭运算

 礼帽和黑帽


 腐蚀与膨胀

# 腐蚀和膨胀是针对白色部分(值为1,高亮部分)而言的
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 读取图像
img = cv.imread("picture/dot.jpg")

# 创建核结构
kernal = np.ones((5, 5), np.uint8)

# 腐蚀
# 使图像中的高亮部分减小,是求局部最小值的操作
# 具体操作:用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做与操作
# 作用:消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点
# cv.erode(img, kernal, iteration)
# img:要处理的图像
# kernal:结构
# iteration:腐蚀的次数,默认是1
erosion = cv.erode(img, kernal)

# 膨胀
# 使图像中的高亮部分扩张,是求局部最大值的操作
# 具体操作:用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做或操作
# 作用:将与物体接触的所有背景点合并到物体中,使目标增大,可填补目标中的孔洞
# cv.dilate(img, kernal, iteration)
# img:要处理的图像
# kernal:核结构
# iteration:腐蚀的次数,默认是1
dilate = cv.dilate(img, kernal)

# 显示图像
plt.imshow(img[:, :, :: -1])
plt.show()
plt.imshow(erosion[:, :, :: -1])
plt.show()
plt.imshow(dilate[:, :, :: -1])
plt.show()

运行结果

 原图:

腐蚀:​ 膨胀:

 开运算和闭运算

# 开运算和闭运算是将腐蚀和膨胀按一定的次序进行处理。两者是不可逆的,即先开后闭并不能得到原来的图像

# 开运算
# 先腐蚀后膨胀
# 功能:分离物体,消除小区域
# 特点:消除噪点,去除小的干扰项,而不影响原来的图像

# 闭运算
# 先膨胀后腐蚀
# 功能:消除闭合物体里面的孔洞
# 特点:填充闭合区域

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 读取图像
img1 = cv.imread("picture/dot.jpg")
img2 = cv.imread("picture/dot.jpg")

# 创建核结构
kernal = np.ones((5, 5), np.uint8)

# 开运算和闭运算
# cv.morphologyEx(img, op, kernel)
# img: 要处理的图像
# op: 处理方式:开运算:cv.MORPH_OPEN;闭运算:cv.MORPH_CLOSE
# kernal: 核结构

# 开运算
cvOpen = cv.morphologyEx(img1, cv.MORPH_OPEN, kernal)
# 闭运算
cvClose = cv.morphologyEx(img2, cv.MORPH_CLOSE, kernal)

# 显示图像
plt.imshow(img1[:, :, :: -1])
plt.show()
plt.imshow(cvOpen[:, :, :: -1])
plt.show()
plt.imshow(cvClose[:, :, :: -1])
plt.show()

运行结果 

原图:

开运算:​ 闭运算:

 礼帽和黑帽

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 读取图像
img1 = cv.imread("picture/dot.jpg")
img2 = cv.imread("picture/dot.jpg")

# 创建核结构
kernal = np.ones((5, 5), np.uint8)

# 礼帽运算
# 原图像与开运算图像之差
# 功能:突出比原图轮廓周围的区域更亮的区域(这一操作和选择的核的大小有关),用来分离比邻近点亮一些的斑块
# 当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用礼帽运算进行背景提取

# 黑帽运算
# 原图像与闭运算图像之差
# 功能:突出比原图轮廓周围的区域更暗的区域(这一操作和选择的核的大小有关),用来分离比邻近点亮一些的斑块

# 礼帽运算和黑帽运算
# cv.morphologyEx(img, op, kernel)
# img: 要处理的图像
# op: 处理方式:礼帽运算:cv.MORPH_TOPHAT;黑帽运算:cv.MORPH_BLACKHAT
# kernal: 核结构

# 礼帽运算
cvTophat = cv.morphologyEx(img1, cv.MORPH_TOPHAT, kernal)
# 黑帽运算
cvBlackhat = cv.morphologyEx(img2, cv.MORPH_BLACKHAT, kernal)

# 显示图像
plt.imshow(img1[:, :, :: -1])
plt.show()
plt.imshow(cvTophat[:, :, :: -1])
plt.show()
plt.imshow(cvBlackhat[:, :, :: -1])
plt.show()

运行结果

  原图:

礼帽运算:​ 黑帽运算:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值