day12 - 图像修复

news/2025/1/12 21:53:16/

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

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

完成本期内容,你可以:

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

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

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

  • 操作系统: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.ppmy.cn/news/85111.html

相关文章

软件测试完后,运行后还有BUG,测试人员就应该背锅吗?

测试完成后还有bug,测试人员肯定是有责任的,第一时间要赶紧处理而不是着急甩锅。但是这口锅全部扣测试身上,明显也是不能接受的,关键在于测试人员需要找出足够的证据来保护自己。 或许很多人会说测试不可能发现所有的bug&#xf…

从索引结点出发探索软、硬链接

索引结点的初步认识 对于整个计算机系统的资源管理,我们可以认为,OS先将这些资源的数据信息,给描述起来构成一个部分,然后再将它们组织起来,就能够实现由OS集中管理。举一个最经典的例子,进程的引入是为了…

算法Day16 | 104.二叉树的最大深度,559.n叉树的最大深度, 111.二叉树的最小深度,222.完全二叉树的节点个数

Day16 104.二叉树的最大深度559.n叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数 104.二叉树的最大深度 题目链接: 104.二叉树的最大深度 深度和高度相反。 高度,自然是从下向上数:叶子节点是第一层,往上数&#x…

【C语言】常用内置函数汇总

printf():输出函数,用于在屏幕上显示文本或变量的值。 scanf():输入函数,用于从键盘上获取用户输入的数据。 strlen():字符串长度函数,用于计算一个字符串的长度。 strcpy():字符串复制函数&…

AI 生成第7篇测试文章:测试数据需要怎么准备?

背景 测试数据是软件测试过程中至关重要的组成部分。一般来说,测试数据并不是随机生成的数据,而是经过精心设计和构造的数据,以确保软件系统可以完整地进行测试。在本文中,我们将探讨如何准备测试数据。 准备测试数据 1.理解测…

你还不知道~~这个是什么意思吗,还以为是作者写错了

文章目录 前言一、来个例子二、按位非~三、小知识 前言 主要是来学习一下js中运算符的相关的知识 一、来个例子 ~~(Math.random() * 10)看起来像是要获取随机数的。 我们先把括号内的东西粘到控制台看看: 结果: (Math.random() * 10) //4.47062635057…

80.确定和规划项目(步骤1和2)

你的第一个现实世界的项目 ● 你的第一份“工作”!、 ● 你受雇为一家名为Omnifood的虚构公司设计并建立一个网站。 ● Omnifood是一家使用人工智能来创建和提供定制健康膳食计划的初创公司。 ● 他们为我们提供了网站的所有内容(content.md&#xff09…

微前端乾坤

1. 乾坤 简介 qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统 官网:https://qiankun.umijs.org/zh/guide 2.使用 背景: vue2.0 , vue-cli 5.0 主应用: 安装乾坤…