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

OpenCV:图像修复

目录

简述

1. 原理说明

1.1 Navier-Stokes方法(INPAINT_NS)

1.2 快速行进方法(INPAINT_TELEA)

2. 实现步骤

2.1 输入图像和掩膜(Mask)

2.2 调用cv2.inpaint()函数

2.3 完整代码示例

2.4 运行结果

3. 掩膜制作方法

4. 差异

4.1 修复效果

4.2 计算效率

5. 总结


简述

在 OpenCV 中,图像修复是一种用于去除图像中不需要的部分(如划痕、污渍等)的技术。OpenCV 提供了两种主要的图像修复算法:基于流体动力学的图像修复方法(Navier-Stokes,NS)和基于快速行进算法(Fast Marching Method,FMM)的修复方法。


1. 原理说明

cv2.inpaint() 基于两种算法:

1.1 Navier-Stokes方法(INPAINT_NS)

  • 通过流体动力学模拟,沿等照度线(颜色梯度方向)传播信息。
  • 适合修复自然纹理,但计算速度较慢。

1.2 快速行进方法(INPAINT_TELEA)

  • 基于像素邻域的加权平均,优先修复边界附近的区域。
  • 速度更快,适合实时处理。

2. 实现步骤

2.1 输入图像和掩膜(Mask)

  • 原始图像:待修复的图片(需为uint8格式)。
  • 掩膜图像:标记需修复区域的二值图像(白色区域为需修复部分)。

2.2 调用cv2.inpaint()函数

inpainted_img = cv2.inpaint(src, mask, inpaintRadius, flags)
  •  src:输入图像(BGR格式)。
  • mask:掩膜图像(单通道,非零像素表示需修复区域)。
  • inpaintRadius:修复半径(影响周围像素的范围,通常设为3-5)。
  • flags:选择算法(cv2.INPAINT_NS 或 cv2.INPAINT_TELEA)。

2.3 完整代码示例

import cv2
import numpy as np# 读取原始图像和掩膜
image = cv2.imread("D:\\resource\\opencv\\lena_damaged1.png")# 掩膜需为单通道
mask = cv2.imread("D:\\resource\\opencv\\mask1.png", cv2.IMREAD_GRAYSCALE)  # 检查图像是否读取成功
if image is None or mask is None:print("Error: image or mask is none !")exit()# 图像修复
inpainted_telea = cv2.inpaint(image, mask, inpaintRadius=3, flags=cv2.INPAINT_TELEA)
# inpainted_ns = cv2.inpaint(image, mask, inpaintRadius=3, flags=cv2.INPAINT_NS)# 显示结果
cv2.imshow("image", image)
cv2.imshow("mask", mask)
cv2.imshow("Inpainted (TELEA)", inpainted_telea)
# cv2.imshow("Inpainted (NS)", inpainted_ns)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.4 运行结果

原图: 

mask:

TELEA:

注意事项:

  1. 掩膜必须为单通道二值图像(0表示正常区域,非0表示需修复区域)。

  2. 修复区域周围需有足够的信息供算法参考,否则效果可能不理想。

  3. 对于复杂场景(如大面积修复),建议结合深度学习模型(如DeepFill、GAN)。


3. 掩膜制作方法

若没有掩膜图像,可通过以下方式生成:

  • 手动标注(如用画图工具标记需修复区域为白色)。
  • 程序生成(例如通过阈值分割或边缘检测):
# 示例:通过颜色阈值生成掩膜(假设修复红色区域)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_red = np.array([0, 50, 50])
upper_red = np.array([10, 255, 255])
mask = cv2.inRange(hsv, lower_red, upper_red)

4. 差异

4.1 修复效果

cv2.INPAINT_TELEA:

  • 修复后的图像通常具有较好的平滑性,在处理小面积的噪声、划痕等损坏时,能够快速生成视觉上较为自然的结果。它对于简单的图像修复任务表现出色,能够有效地去除小瑕疵,使图像看起来更加干净。
  • 然而,在处理大面积的缺失区域或具有复杂结构的图像时,可能会出现模糊或丢失细节的问题,因为它更侧重于平滑性,可能会过度平滑图像中的一些重要特征。

cv2.INPAINT_NS:

  • 该算法在保留图像的结构信息方面表现更优,尤其适用于修复包含重要线条、纹理或边缘的图像。它能够更好地保持图像的原有结构,使得修复后的区域与周围环境更加融合。
  • 但在某些情况下,修复结果可能会显得不够平滑,特别是在处理一些颜色变化较为剧烈的区域时,可能会出现一些轻微的块状效应。

4.2 计算效率

cv2.INPAINT_TELEA:

  • 由于其基于快速行进算法,计算速度相对较快。它在处理小规模的修复任务时能够迅速给出结果,对于实时性要求较高的应用场景更为适用。

cv2.INPAINT_NS:

  • 该算法需要求解较为复杂的偏微分方程,计算量相对较大,因此处理速度较慢。在处理大尺寸图像或需要修复大面积区域时,可能会花费较多的时间。

5. 总结

在实际应用中选择使用 cv2.INPAINT_TELEA 还是 cv2.INPAINT_NS 可以从以下几个方面进行考虑: 

考虑因素选择 cv2.INPAINT_TELEA 的情况选择 cv2.INPAINT_NS 的情况
修复区域特征小面积、简单瑕疵修复,如轻微划痕、小斑点、孤立噪声点大面积、复杂结构修复,图像含明显线条、纹理、边缘
对图像细节和结构的要求追求平滑效果,不太在意细微结构变化注重细节保留,图像细节信息重要
计算资源和时间限制实时性要求高的场景,如实时视频流修复计算资源充足且不考虑时间成本,如珍贵文物图像离线修复

相关文章:

OpenCV:图像修复

目录 简述 1. 原理说明 1.1 Navier-Stokes方法(INPAINT_NS) 1.2 快速行进方法(INPAINT_TELEA) 2. 实现步骤 2.1 输入图像和掩膜(Mask) 2.2 调用cv2.inpaint()函数 2.3 完整代码示例 2.4 运行结果 …...

QT全局所有QSS样式实时切换

方法如下: void loadQss(int qssType) {QString name;if (qssType 1)name ":/qss/day.qss";elsename ":/qss/night.qss";QFile file(name);file.open(QFile::ReadOnly);QString qss;qss file.readAll();qApp->setStyleSheet(qss);file.…...

MySQL三大版本的演进

三大版本的演进 文章目录 三大版本的演进一:5.6版本(大跃进时期)1:支持只读事务2:innodb存储引擎增强2.1:缓冲池刷盘策略优化2.2:BufferPool缓冲池预热 3:新增Performance_Schema库监…...

利用 IMU 估计人体关节轴向和位置 —— 论文推导

Title: 利用 IMU 估计人体关节轴向和位置 —— “Joint axis and position estimation from inertial measurement data by exploiting kinematic constraints” —— 论文推导 文章目录 I. 论文回顾II. 铰接关节的约束1. 铰接关节约束的原理2. 铰接关节约束的梯度3. 铰接关节约…...

脚本一键生成管理下游k8s集群的kubeconfig

一、场景 1.1 需要管理下游k8s集群的场景。 1.2 不希望使用默认的cluster-admin权限的config. 二、脚本 **重点参数: 2.1 配置变量。 1、有单独namespace的权限和集群只读权限。 2、自签名的CA证书位置要正确。 2.2 如果配置错误,需要重新…...

数据库系统概念第六版记录 三

外码约束(Foreign Key Constraint) 外码(Foreign Key, FK)是关系数据库中的一个约束,它用于保证表之间的引用完整性。外码的值必须: 要么存在于被引用表的主键列中,要么为空(NULL&…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-files.py

files.py ultralytics\utils\files.py 目录 files.py 1.所需的库和模块 2.class WorkingDirectory(contextlib.ContextDecorator): 3.def spaces_in_path(path): 4.def increment_path(path, exist_okFalse, sep"", mkdirFalse): 5.def file_age(path__fi…...

微信小程序案例1——制作猫眼电影底部标签导航栏

文章目录 一、项目步骤1 新建一个无AppID的movie项目2将准备好的底部标签导航图标拷贝到movie项目下面(将图标文件夹image放到项目文件夹里)3 打开App.json配置文件,在pages数组里添加4个页面路径:电影“pages/movie/movie”、影院“pages/cinema/cinema…...

【大数据技术】搭建完全分布式高可用大数据集群(Kafka)

搭建完全分布式高可用大数据集群(Kafka) kafka_2.13-3.9.0.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Kafka 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目录下。 安…...

【服务器知识】如何在linux系统上搭建一个nfs

文章目录 NFS网络系统搭建**1. 准备工作****2. 服务器端配置****(1) 安装 NFS 服务****(2) 创建共享目录****(3) 配置共享规则****(4) 生效配置并启动服务****(5) 防火墙配置** **3. 客户端配置****(1) 安装 NFS 客户端工具****(2) 创建本地挂载点****(3) 挂载 NFS 共享目录***…...

图片画质增强:轻松提升画质

前言: 今天给大家推荐一款非常实用的图片画质增强软件,它无需联网即可使用,完全离线操作,这款软件基于先进的深度学习技术,能够对模糊图片进行强大的高清处理,效果令人惊艳。 图片画质增强:一…...

vscode快速接入deepseek 实践操作

背景说明 在deepseek快速火爆的情况下,也想自己体验一把。看看在vscode中集成进来,方便平时的脚本开发。对于年纪大的人还是非常方便的。 操作过程 安装continue 打开vscode进入扩展市场,搜索安装 安装完成就是上面的样子,会…...

mapbox进阶,添加绘图扩展插件,绘制圆形

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…...

Cursor 与多语言开发:全栈开发的利器

引言 全栈开发要求开发者跨越前端、后端、数据库甚至数据科学等多个技术领域,而不同技术栈往往需要切换工具和思维方式。Cursor 作为一款 AI 驱动的智能编程助手,凭借其对 20 编程语言 和主流框架的深度支持,正在成为全栈开发的“瑞士军刀”…...

2025 CCF BDCI|“基于TPU平台的OCR模型性能优化”一等奖作品

2024年12月,中国计算机学会在海南博鳌成功举办了第十二届CCF大数据与计算智能大赛(简称2024 CCF BDCI)。本届比赛的算能赛道吸引了1748名选手报名,经过激烈角逐,北京航空航天大学的“常务副SOTA”团队脱颖而出&#xf…...

FPGA的IP核接口引脚含义-快解

疑问 手册繁琐,怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌,手册确实比较详细但繁琐,如何快速知晓该部分信息,涛tao道长给你们说,简单得很,一般新入门的道友有所不知,往往后面…...

数据库高安全—审计追踪:传统审计统一审计

书接上文数据库高安全—角色权限:权限管理&权限检查,从权限管理和权限检查方面解读了高斯数据库的角色权限,本篇将从传统审计和统一审计两方面对高斯数据库的审计追踪技术进行解读。 4 审计追踪 4.1 传统审计 审计内容的记录方式通…...

机器学习 - 需要了解的条件概率、高斯分布、似然函数

似然函数是连接数据与参数的桥梁,通过“数据反推参数”的逆向思维,成为统计推断的核心工具。理解它的关键在于区分“参数固定时数据的概率”与“数据固定时参数的合理性”,这种视角转换是掌握现代统计学和机器学习的基础。 一、在学习似然函…...

Spring Boot Web 入门

目录 Spring Boot Web 是 Spring Boot 框架的一个重要模块,它简化了基于 Spring 的 Web 应用程序的开发过程。以下是一个 Spring Boot Web 项目的入门指南,涵盖了项目创建、代码编写、运行等关键步骤。 1. 项目创建 使用 Spring Initializr 使用 IDE …...

神经网络|(八)概率论基础知识-二项分布及python仿真

【1】引言 前序已经学习了古典概型、条件概率、全概率公式和贝叶斯公式,它们作为基础,解释了事件发生及其概率的对应关系,相关文章链接为: 神经网络|(四)概率论基础知识-古典概型-CSDN博客 神经网络|(五)概率论基础知识-条件概…...

GoAccess源码深度解析:从main函数到核心模块调用链的完整指南

GoAccess源码深度解析:从main函数到核心模块调用链的完整指南 【免费下载链接】goaccess allinurl/goaccess: 是一个开源的 Web 日志分析工具,用于分析访问日志并生成报告。它可以帮助开发者快速了解网站流量、访问者等信息,优化网站性能。特…...

uni-app微信小程序版本更新策略:冷启动与热启动的优化实践

1. 理解uni-app微信小程序的启动机制 开发过微信小程序的同行应该都遇到过这样的困扰:明明已经发布了新版本,但部分用户反馈看到的还是旧版内容。这种情况在uni-app开发的微信小程序中尤为常见,因为uni-app的编译机制和微信原生小程序存在一些…...

技术赋能B端拓客:号码核验行业的破局与价值深耕,氪迹科技法人股东核验筛选系统,阶梯式价格

2026年,B端市场进入存量竞争的深水区,“精准获客、降本增效”不再是企业的加分项,而是生存发展的必选项。号码核验作为B端拓客流程的前置筛选环节,直接决定了线索质量、人力效能与投入回报比,成为影响企业拓客竞争力的…...

3个关键步骤解决INAV VTOL模式切换抖动问题

3个关键步骤解决INAV VTOL模式切换抖动问题 【免费下载链接】inav INAV: Navigation-enabled flight control software 项目地址: https://gitcode.com/gh_mirrors/in/inav 垂直起降(VTOL)无人机融合了固定翼的续航优势与多旋翼的起降灵活性&…...

颠覆传统数学输入:MathLive交互式公式编辑器三步实现跨平台数学表达

颠覆传统数学输入:MathLive交互式公式编辑器三步实现跨平台数学表达 【免费下载链接】mathlive A web component for easy math input 项目地址: https://gitcode.com/gh_mirrors/ma/mathlive 在数字化教育与科研领域,数学公式的编辑始终是制约效…...

Unix哲学:一切皆文件与网络通信的统一抽象

目录 Unix哲学:一切皆文件与网络通信的统一抽象 1. Unix哲学的核心:“一切皆文件” 2. 统一接口:Unix I/O操作 3. 文件描述符:操作的“取货单” 4. 网络通信:套接字作为特殊文件 5. 总结:抽象的力量 前…...

PyTorch 2.8镜像多场景落地:从Diffusers文生视频到Transformers微调全流程

PyTorch 2.8镜像多场景落地:从Diffusers文生视频到Transformers微调全流程 1. 开箱即用的深度学习环境 PyTorch 2.8深度学习镜像基于RTX 4090D 24GB显卡和CUDA 12.4深度优化,为各类AI任务提供稳定高效的运行环境。这个镜像最吸引人的特点是它的"万…...

模拟IC设计中的‘效率’权衡:深入理解gm/ID如何平衡增益、带宽与噪声

模拟IC设计中的‘效率’权衡:深入理解gm/ID如何平衡增益、带宽与噪声 在模拟电路设计的浩瀚海洋中,gm/ID参数犹如一座灯塔,指引着工程师们在增益、带宽与噪声的复杂权衡中寻找最优解。这个看似简单的比值背后,蕴含着晶体管工作的…...

手把手教你用GLM-4V-9B:上传图片就能对话的AI模型部署实战

手把手教你用GLM-4V-9B:上传图片就能对话的AI模型部署实战 1. 环境准备与快速部署 1.1 系统要求 操作系统:Linux (推荐Ubuntu 20.04)GPU:NVIDIA显卡,显存≥24GB (如RTX 4090)CUDA:11.7Python:3.8 1.2 一…...

开源ERP新选择:Odoo如何助力钢铁冶金企业实现数字化转型

Odoo开源ERP:钢铁冶金企业数字化转型的模块化引擎 钢铁冶金行业正面临前所未有的转型压力——从环保合规到供应链波动,从劳动力成本上升到全球化竞争。在这个背景下,一套既能快速响应业务变化又能控制成本的ERP系统不再是奢侈品,…...