首页 > 编程知识 正文

帮你解锁一个新技能,opencv完美媲美PS,图片PS,我们代码实现

时间:2023-05-03 06:24:16 阅读:103087 作者:2998

很多时候,我们选择了一张图片,但是图片上有水印,那么如果我们不知道PS,应该如何处理图片呢?这里简单介绍一下opencv的cv2.inpaint的图片修复功能,可以完美匹配PS。

OpenCV提供了两种算法。两者都可以通过同一个函数cv2.inpaint()来访问

图像恢复

opencv图片修复算法

第一种算法基于alexandreu Telea 2004年发表的《基于快速行进法的图像修复技术》。它基于快速移动方法。考虑图像中要修复的区域。算法从区域的边界开始,然后进入区域,逐渐填充边界内的所有内容。它需要在邻近像素周围的小邻域中进行修复。该像素由邻域中所有已知像素的归一化加权和代替。选择权重是一个重要的问题。对于该点附近的那些像素,边界法线附近的像素和边界轮廓上的像素被赋予更多的权重。一旦像素被修复,它将使用快速行进方法移动到下一个最近的像素。FMM确保已知像素附近的像素首先被修复,这样它就像手动启发式操作一样工作。使用标志cv2。INPAINT_TELEA启用此算法。

第二种算法是基于贝尔塔米奥、马塞洛、安德烈l贝尔托齐和吉列尔莫萨皮罗在2001年撰写的文章《纳维尔-斯托克斯、流体动力学和图像与视频修复》,该算法基于流体动力学,使用偏微分方程。基本原则是幽默的。它首先沿着已知区域的边缘行进到未知区域(因为边缘是连续的)。它继续等待照片(连接相同强度点的线,就像连接相同高度点的轮廓一样),同时匹配修复区域边界的梯度向量。为此,使用了流体动力学的一些方法。获得颜色后,填充颜色以减少该区域的最小差异。使用标志cv2。INPAINT_NS启用此算法。

附言(同postscript);警官(police sergeant)

图片修复代码实现

opencv可以修复图片,主要使用cv2.inpaint()功能。

输出=cv2.inpaint(图像、遮罩、inpaintRadius、标志=标志)

图像:输入8位1通道或3通道图像

遮罩:修复遮罩,8位1通道图像

输出:输出与图像大小和类型相同的图像。

修复半径:算法考虑的每个点的圆形邻域的半径

标志:

基于纳维尔-斯托克斯的修复方法

亚历山德鲁泰拉的修复技术

知道了cv2.inpaint的功能,就可以用代码修复opencv图片了。

导入cv2

#flags=cv2。INPAINT _ TELEA

flags=cv2。修复程序

image=cv2 . imread(' examples/1 . png ')

mask=cv2.imread('示例/mask1.png ')

mask=cv2.cvtColor(mask,cv2。颜色_BGR2GRAY)

输出=cv2.inpaint(图像,遮罩,3,标志=标志)

cv2.imshow('Image ',Image)

cv2.imshow('mask ',mask)

cv2.imshow('输出',输出)

cv2.waitKey(0)

首先,我们设计了cv2.inpaint函数的标志。有两种方法可以自己尝试。

使用cv2.imread函数读取图片的原始图片和蒙版图片。

使用cv2。cvtcolor(屏蔽,cv2。color _ BGR2gray)函数将图片的BGR空间转换为灰度图片。

然后使用cv2.inpaint功能修复图片。

最后,我们展示图片。

修复后的照片

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。