day12 - 图像修复

news2025/1/10 12:06:23

在图像处理的过程中,经常会遇到图像存在多余的线条或者噪声的情况,对于这种情况我们会先对图像进行预处理,去除掉对图形内容有影响的噪声,在进行后续的处理。

本节实验我们介绍使用图像膨胀来处理图形的多余线条,进行图像修复。

完成本期内容,你可以:

  • 了解图像膨胀的原理和应用

  • 掌握使用图像膨胀操作的使用

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

点击下载源码


膨胀

OpenCV将膨胀操作封装成了cv2.dilate()方法。

函数原型:dst = cv2.dilate(src, kernel, anchor, iterations, borderType, borderValue)
dst为输出图像。

参数描述如下:

  • src:被处理的图像
  • kernel:膨胀使用的核
  • anchor:可选参数,锚点的位置
  • iterations:可选参数,膨胀操作的迭代次数,默认值为1
  • borderType:可选参数,边界样式,建议采用默认值
  • borderValue:可选参数,边界值,建议采用默认值

具体步骤

1. 创建项目结构

创建项目名为图像修复,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

图像修复                                # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 对图像进行修复

  1. code文件夹下创建repair.py文件;
  2. 导入所需的库,OpenCV、numpy;
  3. 读取dataset文件夹下的repair.png图片,并进行展示;
  4. 创建一个3*3的都为1 的数组作为滤波核;
  5. 对图像进行膨胀处理,并展示结果;

代码实现

# 导入OpenCV、numpy
import cv2
import numpy as np

# 读取原图
img = cv2.imread("../dataset/repair.png")
cv2.imshow("original",img)

# 创建3*3的数组作为核
k = np.ones((3, 3), np.uint8)
# 膨胀操作
dst = cv2.dilate(img, k)
cv2.imshow("dilate",dst)

cv2.waitKey()
cv2.destroyAllWindows()

请添加图片描述

效果截图

经过膨胀操作之后,图像中的多余的线条都已经去掉了,虽然膨胀操作会造成图像原图模糊,边缘变粗,但是并没有改变图像的特征其他的处理来减弱图像模糊带来的影响。

点击下载源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567742.html

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

相关文章

web前端 --- CSS(03) -- 元素定位

元素定位:标签在页面中的位置问题 (1)分类 绝对定位:将需要的元素直接定位固定的位置 PS:绝对定位,必须指定一个相对点(一般是父标签)。相对的标签必须是相对定位或者绝对定位【重…

chatgpt赋能python:PythonSearchGroup-Python搜索小组

Python Search Group - Python搜索小组 如果你是一个Python程序员,或者对Python编程语言感兴趣,那么你一定听说过Python Search Group。Python Search Group是一个专注于Python搜索和搜索引擎的小组,他们致力于提供高效的Python搜索工具和搜…

【Netty】字节缓冲区 ByteBuf(七)(下)

文章目录 前言一、实现原理二、ByteBuf 的使用案例三、ByteBuf 的3种使用模式3.1 堆缓冲模式3.2 直接缓冲区模式3.3 复合缓冲区模式 总结 前言 回顾Netty系列文章: Netty 概述(一)Netty 架构设计(二)Netty Channel 概…

鸿蒙Hi3861问题解决-DevEco VSCode无法跳转

一、问题描述 使用Windows和Ubuntu混合编译下载,在windows下搭建VSCodeDevEco Device Tool环境。通过SSH远程Ubuntu系统进行代码修改与编译。 在VSCode中,Ctrl左键,无法跳转。按住Ctrl键,鼠标移到函数上,也不会有任何反…

Flink+hadoop部署及Demo

Hadoop集群高可用部署 下载hadoop包地址 https://dlcdn.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz 上传并解压到3台服务器 配置3台主机的hosts和免密登录 1.修改.bash_profile vi .bash_profile # HADOOP_HOME export HADOOP_HOME/apps/svr/hadoop-3.2.…

一分钟掌握技术术语:API(接口)|电商平台API接口展示示例

很多产品经理在项目开发过程中经常听到:你调我这个接口就好了;这个功能你写个接口给我;有什么不懂的就看下API接口文档。 开发经常说的接口是什么意思呢?术语解释:API(Application Programming Interface&a…

GPT虚拟直播Demo系列(一)|GPT接入直播间实现主播与观众互动

摘要 ChatGPT和元宇宙都是当前数字化领域中非常热门的技术和应用。结合两者的优势和特点,可以探索出更多的应用场景和商业模式。例如,在元宇宙中使用ChatGPT进行自然语言交互,可以为用户提供更加智能化、个性化的服务和支持;在Ch…

成功拿到B站测开岗年薪50W+offer,面经分享

一面 首先,自我介绍,我介绍了自己的技术栈和项目。 技术栈提到过Spring、Redis、Kafka、Docker、K8s、大数据。 项目提到过接口和UI自动化。 我有个大数据平台项目,问了比较多,聊着聊着,提到自己研究过Selenium、T…

Vue3:组件基础(上)

Vue3:组件基础(上) Date: April 11, 2023 Sum: vite的基本使用、组件化开发思想、vue组件的构成、组件的基本使用、封装组件的案例 单页面应用程序 什么是单页面应用程序 单页面应用程序(英文名:Single Page Applic…

【网络安全篇】如何当着面试官的面优雅地装逼!

从胡子的长度和忧郁的眼神我察觉到,面前坐着的这位面试官应该有点东西。 浑身上下流露着打过CTF的气场。我像以往一样,准备花3分钟的时间进行自我介绍。 在此期间,面试官面无表情但很有耐心的听着我balabala。 我按照原定计划顺利地介绍(吹…

国内行业垂直型SaaS公司有哪些?发展前景如何?

01 国内行业垂直型SaaS公司有哪些? 根据艾瑞咨询测算,2021年中国企业级应用软件市场规模达到2592亿元,SaaS在其中占比达到28.1%。 在企业数字化转型的全景图中,SaaS扮演着应用场景层面的关键作用,往往是企业特定环节数…

什么是护网?护网怎么参加?

一、什么是护网行动? 护网行动是以公安部牵头的,用以评估企事业单位的网络安全的活动。 具体实践中。公安部会组织攻防两方,进攻方会在一个月内对防守方发动网络攻击,检测出防守方(企事业单位)存在的安全…

智慧水务系统如何进行有效的数据架构整改?三个企业的改造实践分享

在智慧水务系统中,往往需要对设备中产生的液位、电流、水量等实时指标数据进行存储、分析及监控操作,而这些都是典型的时序数据。面对这些数据的处理时,很多企业在前期选择的大都是传统的实时数据库甚至关系型数据库,随着设备数量…

字段信息 详解,以易举例,创建数据库,程序自动创建数据库的前提,程序读写数据库的第一步

今天要做一个处理比较多数据的工具,就是桌面小软件,重新收拾起以前的易语言来编写,C#等也可以,反正就是最后的成品是绿色免安装。 数据多,优先考虑的就是数据库操作了,又快又好是吧? 第一步&am…

MyBatis源码学习五之插件

MyBatis源码学习五之插件 官网MyBatis插件介绍:https://mybatis.org/mybatis-3/zh/configuration.html#plugins MyBatis的插件使用的范围比较广,像PageHelper就是利用的插件的原理去实现的。插件会做一些通用的功能,比如打印日志&#xff0…

行业报告 | 2022文化科技十大前沿应用趋势(下)

原创 | 文 BFT机器人 04 商业创新 趋势7:区块链技术连接传统文化,数字藏品市场在探索中发展 核心内容: 2022年,数字藏品在区块链技术的助力下应运而生。狭义的数字藏品是指使用区块链技术、基于特定的文化资源所生成唯一的数字凭…

Linux学习记录——이십사 多线程(1)

文章目录 1、以Linux角度理解2、并不是所有的操作系统都这样管理3、页表和物理内存4、线程优缺点5、进程和线程的区别6、线程接口1、pthread_create.2、pthread_join3、线程终止取消正在终止的线程 4、线程分离 1、以Linux角度理解 创建一个进程时,会有pcb结构体&a…

Java集合回顾

能不能和你竭尽全力奔跑 / 向着海平线 / 余晖消逝之前都不算终点 文章目录 集合概述Java 集合概览List, Set, Queue, Map 四者的区别?集合框架底层数据结构总结如何选用集合?为什么要使用集合? ListArrayList 和 Array(数组)的区…

Java SpringBoot自动化网页爬虫项目

介绍 Java SpringBoot自动化网页爬虫,以图形化方式定义爬虫流程,不写代码即可完成爬虫。 平台以流程图的方式定义爬虫,是一个高度灵活可配置的爬虫平台 功能根据需要可定制化开发。 特性 支持Xpath/JsonPath/css选择器/正则提取/混搭提取 支持JSON/XML/二…

aop+springboot实现数据字典表

文章目录 概要整体架构流程目录结构方式pom文件信息application.yml文件信息aop实现方式(重点方式)我们这里主要的实现了,就是在前段请求数据的时候,我们利用aop,拦截数据,将code编码进行翻译,翻译的方式就是我们将cod…