当前位置: 首页 > news >正文

Opencv 图像形态学操作

3.1 形态学-腐蚀操作

img = cv2.imread('CSDN.png')
cv2.imshow('CSDN', img)
cv2.waitKey(0)
cv2.destroyAllWindows

在这里插入图片描述

如果腐蚀核的覆盖区域内的所有像素值都满足条件(阈值),则中心像素的值保持不变;如果有任何像素值不满足条件,则中心像素的值被设置为0(黑色)。

kernal = np.ones((3, 3), np.unit8)
# 传入3×3的腐蚀核,iterration表示腐蚀的操作次数
erosion = cv2.erode(img, kernal, iteration = 2)
cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

多余的细线条没有了。

pie = cv2.imread('pie.png')
cv2.imshow('pie', pie)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

接下来看随着迭代次数变多图像有什么变化

kernel = np.ones((30, 30), np.unit8)
erosion_1 = cv2.erode(pie, kernel, iterations = 1)
erosion_2 = cv2.erode(pie, kernel, iterations = 2)
erosion_3 = cv2.erode(pie, kernel, iterations = 3)
res = np.hstack((erosion_1, erosion_2, erosion_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

图像越来越瘦


3.2 形态学-膨胀操作

kernal = np.ones((3, 3), np.unit8)
dilation = cv2.dilate(erosion, kernal, iternations = 2)cv2.imshow('dilation', dilation)
cv2.waitKey(0)
cv2.destroyAllWindows

在这里插入图片描述

可以看出腐蚀后的线条变细之后,膨胀操作又将线条变粗了

所以我们可以将图像中的噪声点和比结构元素小而且多余需要去除的部分先用腐蚀操作去除,然后再将我们需要的部分用膨胀操作变大。

pie = cv2.imread('pie.png')kernel = np.ones((30, 30), np.unit8)
dilate_1 = cv2.dilate(pie, kernel, iterations = 1)
dilate_2 = cv2.dilate(pie, kernel, iterations = 2)
dilate_3 = cv2.dilate(pie, kernel, iterations = 3)
res = np.hstack((dilate_1, dilate_2, dilate_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

可以看出随膨胀次数操作变多,这个圆越来越肿。


3.3 开运算与闭运算

开运算:先腐蚀,再膨胀

用于去除小亮物体

img = cv2.imread('CSDN.png')
kernel = np.ones((5, 5), np.unit8)
opening = cv2.morphologyEX(img, cv2.MORPH_OPEN, kernel)cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


闭运算:先膨胀,再腐蚀

用于去除小暗物体

img = cv2.imread('CSDN2.png')
cv2.imshow('CSDN2', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

img = cv2.imread('CSDN2.png')kernel = np.ones((5, 5), np.unit8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


3.4 梯度运算

梯度运算的结果等同于膨胀操作和腐蚀操作结果的差值,这个操作可以用来检测图像中的物体边缘。

gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernal)cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


3.5 礼帽与黑帽

礼帽 = 原始输入 - 开运算结果

img = cv2.imread('CSDN.png')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

礼帽操作的效果是突出显示那些比结构元素小的物体

开运算之后,原本比结构元素小的物体处理掉,而比结构元素大的物体则几乎保持不变.

用原始输入减去开运算结果后,剩下的是比结构元素小的物体。


黑帽 = 闭运算 - 原始输入

img = cv2.imread('CSDN2.png')
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

img = cv2.imread('CSDN.png')
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

黑帽操作的效果是用于突出显示比结构元素小的暗物体或凹陷区域。

闭运算之后,原本比结构元素小的物体再膨胀过程中被完全填充,在腐蚀过程也无法恢复。比结构元素大的物体在膨胀又腐蚀后变化不大。

用闭运算结果减去原始输入后,留下来的则是原本的小暗物体的轮廓,只不过变成了亮的小物体。

http://www.lryc.cn/news/544553.html

相关文章:

  • Readability.js 与 Newspaper提取网页内容和元数据
  • 小程序Three Dof识别 实现景区AR体验
  • 腾讯2025年软件测试面试题
  • SSL域名证书怎么续期?
  • Grok3使用体验与模型版本对比分析
  • 《算法宝典:全类型题目索引》
  • Windows 11 部署 GPUStack 运行 DeepSeek
  • LangChain教程 - RAG - PDF问答
  • Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(十二)
  • 《当齐天大圣踏入3A游戏世界:黑神话·悟空的破壁传奇》:此文为AI自动生成
  • Graphics View画一个可调速的风机(pyqt)
  • 基于django图书信息管理系统的搭建(增删改查)
  • Python 编程题 第四节:斐波那契数列、列表的复制、暂停后输出、成绩评级、统计字符
  • 【华为OD机考】华为OD笔试真题解析(15)--异常的打卡记录
  • 跟我学C++中级篇——定时器的设计
  • HTTP 请求时传递多部分表单数据
  • 第J3-1周:DenseNet算法 实现乳腺癌识别
  • Mac 版 本地部署deepseek ➕ RAGflow 知识库搭建流程分享(附问题解决方法)
  • 【解决】OnTriggerEnter/OnTriggerExit 调用匿名委托误区的问题
  • vscode集成DeepSeek
  • MapReduce编程模型
  • SQL server2022的详细安装流程以及简单使用
  • Linux的诞生:一场自由与协作的技术革命
  • Pytorch为什么 nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss?
  • Go入门之文件
  • 基因型—环境两向表数据分析——品种生态区划分
  • Leetcode2414:最长的字母序连续子字符串的长度
  • React(12)案例前期准备
  • 2025年2月28日(RAG)
  • python-leetcode-寻找重复数