OpenCV之图片修复(inpaint)

news2024/11/26 23:34:01

        图片修复基本原理: 我们自己标定噪声的特征,然后根据噪声周围区域的颜色特征修复噪声所在的区域。通俗一点就是用邻近的像素替换那些坏标记,使其看起来像是邻居。

如下图,需要将白色框框去掉:

        

标定噪声特征

先分析白色框框特征,白色区域的值大概处于[240, 240, 240]~[255, 255, 255]之间 图片中其他区域很少有这么高的像素值 所以我们可以把这个白色区域提取出来 表示为前景区域 然后对其膨胀
opencv给我们提供了一个api ,用cv2.inRange进行二值化处理,cv2.inRange 用法如下
 

image.png


把 low-up之间的值变为255 以外的值变成0 
结果如下:

image.png

扩展噪声区域 优化处理效果

cv2.dliate

image.png

图像修复

直接用opencv的api cv2.inpaint函数 用法如下:
就是在原图基础上 把mask中前景区域部分的图像根据 flags指定的方法 进行修复

image.png

结果:
 

image.png


总的来说 这玩意主要是靠opencv里面cv2.inpaint这个函数实现.

代码

代码如下

# 图片修复

import cv2
import numpy as np

path = "./6t.jpg"

img = cv2.imread(path)
hight, width, depth = img.shape[0:3]

# 图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0
thresh = cv2.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))
cv2.imshow("2", thresh)
# 创建形状和尺寸的结构元素
kernel = np.ones((5, 5), np.uint8)

# 扩张待修复区域
# dliate参数:原图 内核 腐蚀次数
hi_mask = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow("3", hi_mask)
# inpaint
specular = cv2.inpaint(img, hi_mask, 5, flags=cv2.INPAINT_TELEA)

cv2.namedWindow("Image", 0)
cv2.imshow("Image", img)

cv2.namedWindow("newImage", 0)
cv2.imshow("newImage", specular)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相关文章

记一次在amd架构打包arm64架构的镜像的试错经历

前提 在amd架构打包了一个镜像,放在arm64架构服务器上可以load ,但是run的时候报平台不兼容的问题。 运行如下命令查看发现 架构属于 amd64 如下: docker inspect 镜像ID需要生成一个arm的镜像才能运行。 尝试 首先Dockerfile 的FROM 基础镜像就的是…

uniapp 接入微信小程序隐私政策兼容

自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则后,方可调用微信提供的隐私接口。 相关公告见:关于小程序隐私保…

Sharding-JDBC分库分表-分布式事务-5

分布式事务 Sharding JDBC事务介绍 分库分表必然会涉及到分布式事务的问题,关于这方面,sharding JDBC为用户提供了两种分布式事务解决方案:XA事务和BASE事务,这两个的区别是:XA事务,追求强一致性&#xf…

udev自动创建设备节点的机制

流程框图如下 自动创建 1 内核检测到设备插入后,会发送一个uevent事件到内核中,并提供有关硬件设备的信息。 2 udevd守护程序收到uevent事件后,创建一个设备类,(向上提交目录信息),会在内核中…

道路交通资产管理体系实施指南

声明 本文是学习GB-T 42932-2023 道路交通资产管理体系实施指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 7 支持 7.1 资源 组织宜确定并提供建立、实施、保持和持续改进资产管理体系所需的资源,包括人力、财力、物质、技 术、知…

Java8实战-总结26

Java8实战-总结26 用流收集数据分组多级分组按子组收集数据 用流收集数据 分组 一个常见的数据库操作是根据一个或多个属性对集合中的项目进行分组。就像前面讲到按货币对交易进行分组的例子一样,如果用指令式风格来实现的话,这个操作可能会很麻烦、啰…

ABB PP846 3BSE042238R1触摸屏模块

ABB PP846 3BSE042238R1是一款触摸屏模块,通常用于工业自动化和控制系统中,以提供人机界面(HMI)功能,允许操作员与控制系统进行交互和监控。以下是一些可能的产品功能和功能,但请注意,具体的功能…

win10一进桌面就全部黑屏了 win10开机黑屏怎么办

在使用Windows 10的过程中,我们会遇到许多问题,但它们都不会像黑屏那样烦人,因为黑屏时不会收到任何错误代码或消息,提示我们从何处开始进行故障排除。 在Windows 10操作系统中,出现黑屏可能有多种原因,它…

性能测试度量指标

1-响应时间 响应时间指从用户或事务在客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,这整个过程所消耗的时间 在性能测试实践中,为了使响应时间更具代表性,响应时间通常是指事务的平均响应时间ART 在实践中要…

力扣刷题-移除指定值的链表元素

力扣203移除元素 题目来源: 力扣203 题目描述: 非常简单的一道题,主要强调两点 链表删除要记录删除位置的前驱节点 头节点没有前驱 因此直接headhead.next为了保持与后两种一致,加上虚拟节点,下一节点指向头节点 /***…

Java 复习笔记 -学生管理系统进阶篇

文章目录 学生管理系统进阶版一,需求部分(一)需求(二)分析1,登录界面2,用户类3,注册功能4,登录功能5,忘记密码6,验证码规则 二,实现部…

【具身智能】RT-2:视觉-语言-动作模型(VLA)

文章目录 前言一、视觉-语言-动作(VLA)模型二、利用 VLM 控制机器人三、实验四、 Demo五、总结前言 Robotic Transformer 2(RT-2)是由谷歌 DeepMind 新推出的大语言模型,它为人类提供了通过纯语言命令来优化机器人控制的能力。与此前的大模型不同,RT-2是一种新型的视觉-…

使用C语言EasyX 创建动态爱心背景

简介 在计算机图形学的世界中,有很多方法可以使程序的界面更加吸引人。在本篇博客中,我将向大家介绍如何使用 EasyX 图形库在 C 中创建一个动态的爱心背景。这不仅是一个简单的动画效果,它还包括背景的星星、旋转的心形以及一个美观的背景渐…

Scrapy爬虫框架实战

Python实现爬虫是很容易的,一般来说就是获取目标网站的页面,对目标页面的分析、解析、识别,提取有用的信息,然后该入库的入库,该下载的下载。以前写过一篇文章《Python爬虫获取电子书资源实战》,以一个电子…

Vite+React+Electron开发入门,10分钟搭建本地环境并打包

前言 想使用vite和react开发跨平台桌面的软件方案有electron和tauri两种,但是我个人更喜欢tauri,无奈electron名声大燥,面试要求里很多都写着:electron...可见这类公司多么落后。但是呢,又秉持着存在即合理的理念&…

Android 12 源码分析 —— 应用层 五(SystemUI的StatusBar类的启动过程和三个窗口的创建)

Android 12 源码分析 —— 应用层 五(SystemUI的StatusBar类的启动过程和三个窗口的创建) 在前面的文章中,我们介绍了SystemUI App的基本布局和基本概念。接下来,我们进入SystemUI应用的各个UI是如何被加入屏幕的。那么我们就先从…

计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

图像分类 教程博客_传送门链接:链接 在本教程中,您将学习如何使用迁移学习训练卷积神经网络以进行图像分类。您可以在 cs231n 上阅读有关迁移学习的更多信息。 本文主要目的是教会你如何自己搭建分类模型,耐心看完,相信会有很大收获。废话不…

Linux——Shell脚本编程(1)

一、为什么要学习 Shell 编程 ? 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。 2)对于 JavaEE 和 Python 程序员来说,工作的需要,要求你编写一些 Shell脚本进行程序或者是服务器的维护&#xff…

【Linux学习笔记】基础命令2

1. rmdir指令 && rm指令1.1. 基础概念1.2. 命令用法1.2.1. rmdir命令1.2.2. rm命令1.2.3. rm命令的注意事项 2. man命令3. cp指令3.1. cp指令基础概念3.2. cp命令的用法 4. mv命令5. cat命令6. more命令 && less命令6.1. more命令6.2. less命令 7. head命令和t…

C#下使用IronPython来实现热更新

问题 之前我们学习过Roslyn,他可以动态编译代码并运行,然后通过ALC加载即插即用,但是遇到一些问题感觉无法解决,我编写一个类A在ALC中,另外一个类B要实例化这个A,我想让他们都能灵活卸载,但是如…