使用OpenCV进行图像修复、Navier-Stokes、INPAINT_TELEA,专栏:各种openCV实践的案例

专栏连接:openCV练习-各种openCV实践的案例


前言

使用OpenCV进行图像修复,在ps里面有现成的功能,但是今天使用代码尝试了下,感觉效果还不错。

这个代码对比较细长的划痕、破损修复的效果比较好,但是对于一个区域类似于圆、矩形等形状修复效果并不是很好。下面会有例子展示。

作为一名工程师,不需要打开ps,只需要编写十几代码就可以进行图像修复!!!

环境:ubuntu、anaconda、python、vscode


什么是图像修复?

图像修复是计算机视觉中的一类算法,其目标是填充图像或视频内的区域。

该区域使用二值掩码来识别,填充通常是通过从需要填充的区域的边界传播信息来完成的。

图像修复最常见的应用是旧扫描照片的修复。它还用于删除图像中不需要的小对象。

修复算法

一共有两种修复算法,

INPAINT_NS : 基于 Navier-Stokes 的修复

大致的思路是这样的,如果你有兴趣可以去读一下源论文:

  • 保留梯度(即边缘特征)
  • 继续在平滑边缘传播颜色信息

INPAINT_TELEA : 基于快速行进方法

在已知的邻域像素和梯度和用于估计要修复的像素的颜色的情况下。使用像素的已知图像邻域的加权平均来修补。一旦像素被修复,边界需要更新

利弊

根据理论和论文,基于 Navier-Stokes 的修复应该更慢,并且倾向于产生比基于 Fast Marching 的方法更模糊的结果。在实践中,我发现情况并非如此。INPAINT_NS 在我们的测试中产生了更好的结果,速度也略好于 INPAINT_TELEA。

核心代码:

while True:
        ch = cv.waitKey()
        if ch == 27:
            break
        if ch == ord('t'):
            res = cv.inpaint(src=img_mask, inpaintMask=inpaintMask, inpaintRadius=3, flags=cv.INPAINT_TELEA)
            cv.imshow('Inpaint Output using FMM', res)
        if ch == ord('n'):
            res = cv.inpaint(src=img_mask, inpaintMask=inpaintMask, inpaintRadius=3, flags=cv.INPAINT_NS)
            cv.imshow('Inpaint Output using NS Technique', res)
        if ch == ord('r'):
            img_mask[:] = img
            inpaintMask[:] = 0
            sketch.show()

其实修复图片使用的代码只是调用了两个包。

使用方法

进入代码文件夹(使用的是conda环境)

python inpaint.py Lincoln.jpg

在这里插入图片描述

在原图需要修复的地方划线即可,按t、n即可使用不同的方法进行处理。


总结

只有手敲的代码才是你的代码。

github:https://github.com/dlagez/opencv/tree/master/github-learnOpenCV/image-Inpainting

参考文章:https://learnopencv.com/image-inpainting-with-opencv-c-python/

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dlage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值