很多时候,我们相中了一张图片,怎奈图片上面有水印,不会PS的我们该如何来处理图片,这里小编介绍一下一下opencv的cv2.inpaint的图片修复函数,使用此cv2.inpaint函数,可以完美匹配PS。

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

图片修复

opencv图片修复算法

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

第二种算法基于Bertalmio,Marcelo,Andrea L. Bertozzi和Guillermo Sapiro于2001年撰写的“Navier-Stokes,流体动力学和图像和视频修补”一文。该算法基于流体动力学并利用偏微分方程。基本原则是heurisitic。它首先沿着已知区域的边缘行进到未知区域(因为边缘是连续的)。它继续等照片(连接具有相同强度的点的线,就像轮廓连接具有相同高度的点一样),同时在修复区域的边界处匹配渐变矢量。为此,使用来自流体动力学的一些方法。获得颜色后,填充颜色以减少该区域的最小差异。使用标志cv2.INPAINT_NS启用此算法。

PS

图片修复代码实现

opencv实现图片的修复,主要使用cv2.inpaint()函数output = cv2.inpaint(image, mask,inpaintRadius, flags=flags)image:输入8位1通道或3通道图像mask:修复掩码,8位1通道图像output:输出与image具有相同大小和类型的图像inpaintRadius:算法考虑的每个点的圆形邻域的半径flags:INPAINT_NS基于Navier-Stokes的方法Alexandru Telea的INPAINT_TELEA方法了解了cv2.inpaint的函数,就可以使用代码来实现opencv图片的修复了import cv2#flags = cv2.INPAINT_TELEAflags = cv2.INPAINT_NSimage = cv2.imread('examples/1.png')mask = cv2.imread('examples/mask1.png')mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)output = cv2.inpaint(image, mask,3, flags=flags)cv2.imshow("Image", image)cv2.imshow("mask", mask)cv2.imshow("Output", output)cv2.waitKey(0)

首先我们设计cv2.inpaint函数的flags,这里有2种方式,可以自行尝试

使用cv2.imread函数来读取原始图片以及图片的mask图片

利用cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)函数把图片BGR空间转换为灰度图片

然后使用cv2.inpaint函数进行图片的修复

最后我们显示图片

修复的照片

vue 实现ps图片编辑_帮你解锁一个新技能,opencv完美媲美PS,图片PS,我们代码实现...相关推荐

  1. c++ opencv实现区域填充_帮你解锁一个新技能,opencv完美媲美PS,图片PS,我们代码实现...

    很多时候,我们相中了一张图片,怎奈图片上面有水印,不会PS的我们该如何来处理图片,这里小编介绍一下一下opencv的cv2.inpaint的图片修复函数,使用此cv2.inpaint函数,可以完美匹配 ...

  2. 解锁一个新技能,如何在Python代码中使用表情包...

    通常我们在使用聊天工具聊天时看见的基础表情包是这样的- [阅读全文] 而在编码过程中,基础表情图是可以使用字符串来识别的.正好python中提供了这个表情包字符串的识别框架Emoji,通过这样的方式我 ...

  3. 你是不是特别想做好一个游戏主播?今天胖哥帮你开启一个新的大门

    你是不是特别想要做好一个游戏主播?你知道带货主播不好,做娱乐主播你没颜值,所以说你想通过游戏直播的方式来赚钱,因为你看着各种大IP小团团,张大仙批的,他们应该赚了很多钱,你知道你也在猜想似的,他们很赚 ...

  4. 会说话的狗狗本电脑版_会说话的电脑有点酷!惠普星14帮你解锁“偷懒”新姿势_惠普 星 14 2020(i5 1135G7/16GB/512GB/MX450)_笔记本新闻...

    在现实生活中你是否遇到过这样的情况,笔记本近在咫尺,但你却懒得走到笔记本面前进行操作.当你疲惫地躺在床上时,心里也总是暗想,如果笔记本能够听我的指令跟我对话就好了.工作和生活当中,我们总免不了想要&q ...

  5. 电脑护眼设置_解锁办公新技能 海信护眼平板Q5玩转工作无负担-科技频道

    工作任务太多,脑袋有点懵圈,相比于此,"工作任务"更重的其实是默默无言的屁股和一直要看个不停的双眼.尤其是遇到一些疑难问题,瞪大了眼睛在各种资料里寻找灵感.每天的用眼负担如此之大, ...

  6. 解锁一个新技巧,让你舒服到不想起床

    ▲ 点击查看 每天睡个好觉,真的是一件很爽的事情. 怎样才能做到这么爽呢?答案当然是好好挑选我们的床上伴侣--床品四件套啦~ 在所有的床品中,四件套绝对是刚需,并且至少需要两套以上用来替换. 如果有人 ...

  7. python调试蓝牙适配器_我写了一个查看Android手机的蓝牙模块是否开启的代码。在AVD上调试,因为是电脑,没有蓝牙适配器,可是...

    为什么我用到蓝牙手机上的时候,刚打开这个程序,就会停止工作呢?代码如下,代码格式什么没错.publicclassMainActivityextendsActivity{BluetoothAdapter ...

  8. k8s jenkins pipeline 多分支发布_给 Jenkins 换一个新皮肤:BlueOcean

    BlueOcean是什么 Jenkins是一款Java开发的跨平台持续集成和持续发布的开源项目,它具有如下特征: 安装及迁移方便:安装直接部署war包,迁移只需替换JENKINS_HOME目录. 配置 ...

  9. vue项目点击左侧子菜单,打开一个新的浏览器标签页

    在项目开发中,产品给了这样一个需求:点击左侧子菜单,在浏览器中打开一个新的标签页,展示数据大屏.在此写个随笔记录下实现过程. 思路:使用编程式导航 实现页面跳转,我们常用的是 $router.push ...

最新文章

  1. 领英Linkedin信息搜集工具InSpy
  2. 推荐系统入门必读:一文读懂推荐系统负采样
  3. 区分Debug版还是Relase版
  4. “约见”面试官系列之常见面试题之第八十九篇之vue生命周期作用(建议收藏)
  5. 在Js或者cess后加版本号 防止浏览器缓存
  6. RocketMq学习笔记001---Kafka,ActiveMQ、RabbitMQ、RocketMQ消息中间件的对比
  7. [译] Architecture Components 之 Adding Components to your Project
  8. 主题:JAVA 桥接模式
  9. sql示例_SQL Server Lead功能概述和示例
  10. 50、BGP配置实验之社团属性community
  11. 视频教程-cURL实战教程-PHP
  12. 细说 AppCompat 主题引发的坑:You need to use a Theme.AppCompat theme with this activity!
  13. 陈希孺《概率论与数理统计》读书笔记
  14. 【58同城和赶集网简历下载获取】
  15. python 列表长度_python求列表长度
  16. js发布订阅原理,代码解析
  17. 一个arm64国产化工控机工程的移植总结
  18. 堰流实验报告思考题_堰流流量测定
  19. 抖音举起兴趣电商屠龙刀
  20. 超实用的十条 VueRouter 高级技巧!

热门文章

  1. eval并发 shell_Shell 实现多任务并发
  2. hashmap remove 没释放内存_面试题:来,问你几个关于HashMap的问题?
  3. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race
  4. python入门之迭代器
  5. 实践作业4:Web测试实践(小组作业)记录1
  6. laytpl : 一款非常轻量的JavaScript模板引擎
  7. javascript基础(第二天)
  8. 课后作业:情境二:数据类型与运算符 3、运算符及表达式
  9. HDU 1114(没有变形的完全背包)
  10. 性能测试关注点整理总结