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

news2025/1/20 15:47:48

文章目录

    • 🧡🧡实验流程🧡🧡
      • 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 plt

def 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.coloradmin.cn/o/1719520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Nginx】Nginx 日志配置

Nginx 日志配置 Nginx 主要有两种日志类型:访问日志(access log)和错误日志(error log),可以帮助监控和调试服务的运行。 1.访问日志 访问日志主要记录客户端的请求,客户端向 Nginx 发起的每…

jsp实验18 JDBC

源代码以及执行结果截图&#xff1a; admoinStudent.jsp <% page language"java" contentType"text/html; charsetutf-8" pageEncoding"utf-8"%> <%page import"java.sql.*"%> <% page import"javax.sql.DataS…

【并发程序设计】12.内存映射

12.内存映射 使一个磁盘文件与内存中的一个缓冲区相映射&#xff0c;进程可以像访问普通内存一样对文件进行访问&#xff0c;不必再调用read,write&#xff0c;更加高效。 用到的函数 mmap函数 原型&#xff1a; #include <sys/mman.h> void* mmap(void* start, size_…

芙芙工具箱app源码 开源的工具箱

该工具箱集成多种实用工具&#xff0c;提供了便捷、高效的电脑使用体验&#xff0c;这款软件具备系统优化、文件管理、网络工具等多个模块&#xff0c;能够满足用户在日常使用中的多种需求&#xff0c; 芙芙工具箱可以帮助你轻松管理文件、优化系统性能、检测网络状态等&#…

反VC情绪:加密市场需要新的分布式代币发行方式

GME事件 GME事件反应了社交媒体在金融决策中的影响力&#xff0c;散户投资者群体通过集体行动&#xff0c;改变了很多人对股市的看法和参与方式。 GME事件中&#xff0c;meme扮演了核心角色。散户投资者使用各种meme来沟通策略、激励持股行为&#xff0c;创造了一种反对华尔街…

C语言文件操作:打开关闭,读写

程序文件 源程序文件&#xff08;后缀为.c&#xff09; 目标文件&#xff08;Windows环境后缀为.obj&#xff09; 可执行文件&#xff08;Windows环境后缀为.exe&#xff09; fputc FILE* pf fopen("test.txt","w");if (pf NULL){printf("%s\n"…

scp:Linux系统本地与远程文件传输命令

scp 是Linux系统中用于在本地主机和远程主机之间进行文件传输的命令。 详细说明&#xff1a; scp 命令用于安全地将文件从一个主机传输到另一个主机&#xff0c;所有传输数据都是加密的。语法&#xff1a; scp [参数] [源文件路径] [目标主机:目标路径] 参数说明&#xff1a…

977. 有序数组的平方 - 力扣

1. 题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 2. 示例 3. 分析 我们当然可以遍历数组平方元素&#xff0c;然后再使用sort排序&#xff0c;但这里时间复杂度就为 O(logN) 了。 我…

appium元素定位工具_uiautomatorviewer.bat

特点&#xff1a; uiautomatorviewer是android-sdk自带的元素定位工具uiautomatorviewer只能用于安卓系统&#xff1b;它是通过截屏分析XML布局文件方式&#xff0c;来提供控件信息的查看服务 uiautomatorviewer.bat 基本使用 路径&#xff1a;这个工具是Android SDK中自带&…

php反序列化学习(3)

1、session 当session_start()被调用或者php.ini中session.auto_start为1时&#xff0c;php内部调用会话管理器&#xff0c;访问用户session被序列化后&#xff0c;存储到指定目录&#xff08;默认为/tmp&#xff09;。 漏洞产生&#xff1a;写入格式与读取格式不一致 处理器…

蓝桥杯2024国赛--备赛刷题题单

1.游戏&#xff08;单调队列&#xff09; 注意如果结果是分数&#xff0c;直接设置变量为double&#xff0c;最好不要使用把int类型乘1.0变成分数来计算。 #include <iostream> #include <queue> using namespace std; const int N1e510; //滑动窗口大小为k,最大值…

运维开发.Kubernetes探针与应用

运维系列 Kubernetes探针与应用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263…

HTML静态网页成品作业(HTML+CSS)——企业装饰公司介绍网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

【C++】C++11新特性:列表初始化、声明、新容器、右值引用、万能引用和完美转发

目录 一、列表初始化 1.1 { } 初始化 1.2 std::initializer_list 二、声明 2.1 auto 2.2 decltype 2.3 nullptr 三、新容器 四、右值引用和移动语义 4.1 左值和左值引用 4.2 右值和右值引用 4.3 左值引用与右值引用比较 4.4 右值引用使用场景和意义&#xff1a;移…

chap5 CNN

卷积神经网络&#xff08;CNN&#xff09; 问题描述&#xff1a; 利用卷积神经网络&#xff0c;实现对MNIST数据集的分类问题 数据集&#xff1a; MNIST数据集包括60000张训练图片和10000张测试图片。图片样本的数量已经足够训练一个很复杂的模型&#xff08;例如 CNN的深层…

Visual Studio Code使用(C++项目新建,运行)

VS Code 直接在官网下载安装。 接下来安装插件&#xff0c;下图是C所需的对应插件 1.新建项目 VS Code下载安装完成后&#xff0c;直接进入欢迎页&#xff1a; 在访达/文件夹中新建一个文件夹&#xff0c;欢迎页点击【打开】&#xff0c;选择刚刚新建的文件夹。点击第一个图…

MT8781安卓核心板_MTK联发科Helio G99核心板规格参数

MT8781安卓核心板采用先进的台积电6纳米级芯片生产工艺&#xff0c;配备高性能Arm Cortex-A76处理器和Arm Mali G57 GPU&#xff0c;加上LPDDR4X内存和UFS 2.2存储&#xff0c;在处理速度和数据访问速度上都有着出色的表现。 MT8781还支持120Hz显示器&#xff0c;无需额外的DSC…

vue3学习(六)

前言 接上一篇学习笔记&#xff0c;今天主要是抽空学习了vue的状态管理&#xff0c;这里学习的是vuex&#xff0c;版本4.1。学习还没有学习完&#xff0c;里面有大坑&#xff0c;难怪现在官网出的状态管理用Pinia。 一、vuex状态管理知识点 上面的方式没有写全&#xff0c;还有…

QT软件界面的设计与启动方法

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、Q T界面设计的重要性 二、QT软件的启动与配置 三、QT软件的启动路径设置 四、QT软件启…

Linux--EXT2文件系统

参考资料&#xff1a; linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图_一个块组中索引节点表和数据块区最多占用字节-CSDN博客 linux环境&#xff1a; Linux version 5.15.146.1-microsoft-standard-WSL2 (root65c757a075e2) (gcc (GCC) 11.2.0, GNU ld…