0
点赞
收藏
分享

微信扫一扫

OpenCV 开闭运算

就是耍帅 2022-06-01 阅读 18

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

  1. 开运算

开运算是先腐蚀后膨胀,其作用是:分离物体,消除小区域。特点:消除噪点,去除小的干扰块,而不影响原来的图像。

OpenCV 开闭运算_读取图像

  1. 闭运算

闭运算与开运算相反,是先膨胀后腐蚀,作用是消除/“闭合”物体里面的孔洞,特点:可以填充闭合区域。

OpenCV 开闭运算_读取图像_02

cv.morphologyEx(img, op, kernel)

  • img: 要处理的图像
  • op: 处理方式:若进行开运算,则设为cv.MORPH_OPEN,若进行闭运算,则设为cv.MORPH_CLOSE
  • Kernel: 核结构

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

# 1 读取图像
img1 = cv.imread("./1.png")
img2 = cv.imread("./2.png")

# 2 创建核结构
kernel = np.ones((10, 10), np.uint8)

# 3 图像的开闭运算
cvOpen = cv.morphologyEx(img1, cv.MORPH_OPEN, kernel)  # 开运算
cvClose = cv.morphologyEx(img2, cv.MORPH_CLOSE, kernel)  # 闭运算

# 4 图像展示
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))
axes[0, 0].imshow(img1[:, :, ::-1])
axes[0, 0].set_title("原图")
axes[0, 1].imshow(cvOpen[:, :, ::-1])
axes[0, 1].set_title("开运算结果")
axes[1, 0].imshow(img1[:, :, ::-1])
axes[1, 0].set_title("原图")
axes[1, 1].imshow(cvClose[:, :, ::-1])
axes[1, 1].set_title("闭运算结果")
plt.show()

OpenCV 开闭运算_读取图像_03

举报

相关推荐

0 条评论