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

计算机视觉与模式识别实验1-2 图像的形态学操作

文章目录

    • 🧡🧡实验流程🧡🧡
      • 1.图像膨胀
      • 2.图像腐蚀
      • 3.膨胀与腐蚀的综合使用
      • 4.对下面二值图像的目标提取骨架,并分析骨架结构。
    • 🧡🧡全部代码🧡🧡

🧡🧡实验流程🧡🧡

1.图像膨胀

膨胀原理:设置一个3x3的矩阵,遍历每个像素点,该像素点的值等于以该像素点为中心的3*3范围内的最大值。由于是二值图像(要么0黑,要么255白),所以只要包含周围白(255)的部分,就变为白的。如下,字的外轮廓变粗。
在这里插入图片描述

2.图像腐蚀

腐蚀原理:与膨胀相反,设置一个3x3的矩阵,遍历每个像素点,该像素点的值等于以该像素点为中心的3*3范围内的最小值。由于是二值图像(要么0黑,要么255白),所以只要包含周围黑(0)的部分,就变为黑的。如下,腐蚀后,减少了一些毛刺,并且字体外形向内凹陷变瘦。
在这里插入图片描述

3.膨胀与腐蚀的综合使用

开操作原理:在上述腐蚀操作中,虽然能去除毛刺,但是会对原字体有影响(轮廓变细了),因此再补上膨胀操作,使得字体加粗,即进行先腐蚀后膨胀的操作。如下图,“开”字的毛刺去除了,同时字体轮廓粗细跟原来一样。
在这里插入图片描述
闭操作原理:与开操作相反,即进行先膨胀后腐蚀的操作。相当于先放大所有细节(这样子一些缺陷就可以闭合),然后腐蚀缩小到原字体粗细。如下,“闭”字几个封口闭合了。
在这里插入图片描述

4.对下面二值图像的目标提取骨架,并分析骨架结构。

在这里插入图片描述
梯度计算原理:膨胀图像-腐蚀图像,用大一圈的图像减去小一圈的图像正好就是边缘的信息
在这里插入图片描述

🧡🧡全部代码🧡🧡

import cv2
import numpy as np
import matplotlib.pyplot as pltdef cv_show(img):cv2.imshow('Image', img)cv2.waitKey(0)cv2.destroyAllWindows()"""2-1 膨胀操作
""" 
ori = cv2.imread('img/test1_dilate.png') # 注意不要有中文
kernel = np.ones((3, 3), dtype=np.uint8)
dilate = cv2.dilate(ori, kernel, iterations=1) # 1:迭代次数,也就是执行几次膨胀操作
res = np.hstack((ori, dilate)) # 拼接在一起
cv_show(res)"""2-2 腐蚀操作
"""
ori = cv2.imread('img/test1_erode.png') 
kernel = np.ones((3, 3), dtype=np.uint8)
erosion = cv2.erode(ori, kernel, iterations=1)
res = np.hstack((ori, erosion))
cv_show(res)"""2-3 开闭运算
"""
ori = cv2.imread('img/test1_open_close.png') 
kernel = np.ones((5, 5), dtype=np.uint8)opening = cv2.morphologyEx(ori, cv2.MORPH_OPEN, kernel, 1)
res = np.hstack((ori, opening))
cv_show(res)
closing = cv2.morphologyEx(ori, cv2.MORPH_CLOSE, kernel, 1)  # 有缺陷,填补缺陷
res = np.hstack((ori, closing))
cv_show(res)"""2-4 梯度计算 -- 提取骨架
"""
ori = cv2.imread('img/test1_morph.png') 
kernel = np.ones((3, 3), dtype=np.uint8)
gradient = cv2.morphologyEx(ori, cv2.MORPH_GRADIENT, kernel)
cv_show(gradient)
http://www.lryc.cn/news/359096.html

相关文章:

  • 【前端每日基础】day31——uni-app
  • 云动态摘要 2024-05-31
  • Oracle数据块如何存储真实数据
  • 【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第30课-门的移动动画
  • 智能化改造给企业带来的实际效果
  • 深度学习-语言模型
  • 微型导轨在自动化制造中有哪些优势?
  • 探索气象数据的多维度三维可视化:PM2.5、风速与高度分析
  • 【传知代码】双深度学习模型实现结直肠癌检测(论文复现)
  • 平衡二叉树的应用举例
  • 一键安装 HaloDB 之 Ansible for Halo
  • el-table的上下筛选功能
  • 【手撕面试题】Vue(高频知识点一)
  • LabVIEW车轮动平衡检测系统
  • 【Python爬虫--scrapy+selenium框架】超详细的Python爬虫scrapy+selenium框架学习笔记(保姆级别的,非常详细)
  • 【Linux】Linux环境基础开发工具_3
  • 数字水印 | 图像噪声攻击(高斯/椒盐/泊松/斑点)
  • LeetCode-47 全排列Ⅱ
  • list 的实现
  • 一个程序员的牢狱生涯(47)学法
  • 微信小程序-页面导航
  • 计算机网络- 特定服务类型(Type of Service, TOS) 服务质量(Quality of Service, QoS)
  • 2.6 Docker部署多个前端项目
  • 如何格式化只读U盘?
  • 【并查集】专题练习
  • 服装连锁店收银系统需要具备的五大功能
  • IMU状态预积分代码实现 —— IMU状态预积分类
  • C语言编程:探索最小公倍数的奥秘
  • Java设计模式-活动对象与访问者
  • 用HAL库改写江科大的stm32入门-6-3 PWM驱动LED呼吸灯