学更好的别人,

做更好的自己。

——《微卡智享》

本文长度为2020,预计阅读6分钟

OpenCV图片修复

最近重新学习OpenCV的基础,偶然间发现了npaint的函数,于是就自己做了Demo测试了下,感觉还不错,这篇就来分享一下OpenCV的图片修复函数。

实现效果

上图中可以看到我们对左边源图中右下角蓝色的球区域进行的修复,修复后右图的效果那个蓝色的球就已经不见了。

inpaint函数API

void inpaint( InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags );第一个参数src,输入的单通道或三通道图像;
第二个参数inpaintMask,图像的掩码,单通道图像,大小跟原图像一致,inpaintMask图像上除了需要修复的部分之外其他部分的像素值全部为0;
第三个参数dst,输出的经过修复的图像;
第四个参数inpaintRadius,修复算法取的邻域半径,用于计算当前像素点的差值;
第五个参数flags,修复算法,有两种:INPAINT_NS(基于Navier-Stokes的修复方法) 和INPAINT_TELEA(基于图像梯度的快速匹配方法又称(Telea法));

图像修复的实现思路

步骤

1.  加载图像,然后做图像预处理(转为灰度图、高斯模糊、二值化操作、形态学操作)

2.  寻找轮廓(在已找到的轮廓中随机取一个轮廓做为修复的地方)

3.  创建一个图像为0的相同模版,然后把找到的轮廓用255填充进去

4.  通过inpaint的函数在源图上进行修复,并显示出来

代码实现

新建一个opencv-inpaint的项目,创建main.cpp的文件,配置方法请参照《VS2017配置OpenCV通用属性》

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc,char** argv)
{Mat src = imread("E:/DCIM/tempsrc.jpg");imshow("src", src);Mat tmpsrc,gray, dst;src.copyTo(tmpsrc);//灰度图cvtColor(tmpsrc, gray, COLOR_BGR2GRAY);//高斯模糊GaussianBlur(gray, gray, Size(3, 3), 0);//二值化threshold(gray, gray, 0, 255, THRESH_BINARY | THRESH_OTSU);//形态学开操作Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));morphologyEx(gray, gray, MORPH_OPEN, kernel);//寻找轮廓vector<vector<Point>> contours;vector<Vec4i> hi;findContours(gray, contours, hi, CV_RETR_TREE, CHAIN_APPROX_SIMPLE);//随机一个轮廓做为我们要修复的地方//RNG rng(1234)设定一个具体值,表示下面代码每次生成的结果都是一样的//RNG rng((unsigned)time(NULL)),表示代码每次运行结果都不一样RNG rng((unsigned)time(NULL));int inpaintsize = rng.uniform(0, contours.size() - 1);//在源图上画出随机的轮廓Rect rect = boundingRect(contours[inpaintsize]);putText(tmpsrc, "inpaintsize", Point(rect.x, rect.y), 1, 1, Scalar::all(0));rectangle(tmpsrc, rect, Scalar::all(0));imshow("tmpsrc", tmpsrc);//创建是个模版画上要修复的区域Mat tmp = Mat::zeros(src.size(), CV_8UC1);rectangle(tmp, rect, Scalar::all(255), -1);imshow("tmp", tmp);//进行图像修复inpaint(src, tmp, dst, 5, INPAINT_TELEA);imshow("result", dst);waitKey(0);return 0;
}

运行效果

多运行几次可以看到获取的都是随机的轮廓进行修复。

扫描二维码

获取更多精彩

微卡智享

「 往期文章 」

OpenCV二值化adaptiveThreshold与threshold的对比

C++ OpenCV SVM实战Kindle检测(二)----目标检测

Android划矩形截屏并加入OCR识别

学习|OpenCV图片修复函数inpaint相关推荐

  1. OpenCV图像修复函数inpaint()

    前言 在实际应用或者是工程当中,经常需要对图像进行修复,在OpenCV中提供了能够对含有较少"污染"或者水印的图像进行修复的inpaint()函数 函数原型 void cv::in ...

  2. java Opencv 图片修复 Photo

    OpenCV 如何进行图片修复 修复函数: Photo.inpaint(imageSrc, imageMask, imageDst, radius, Photo.INPAINT_TELEA); ima ...

  3. OpenCV——图像修复函数intpaint()使用详解

    函数原型: inpaint( src, inpaintMask,inpaintRange, flags ) 函数作用是用flags方法和inpaintMask掩膜在考虑每个点邻域圆形半径时修复图像sr ...

  4. 学习OpenCV——BOW特征提取函数(特征点篇)

    没日没夜的改论文生活终于要告一段落了,比起改论文,学OpenCV就是一件幸福的事情.OpenCV的发展越来越完善了,已经可以直接使用BOW函数来进行对象分类了. 简单的通过特征点分类的方法:     ...

  5. 【学习OpenCV】warpAffine函数实现图像旋转

    理论 http://www.cnblogs.com/wangguchangqing/p/4045150.html 翻开任意一本图像处理的书,都会讲到图像的几何变换,这里面包括:仿射变换(affine ...

  6. 【学习OpenCV】flip函数、镜像操作

    矩阵(图像)镜像(翻转) cv::flip void flip(InputArray src, OutputArray dst, int flipCode) 参数: src,输入矩阵 dst,翻转后矩 ...

  7. 三:OpenCV图片颜色通道数据转换

    对图片进行操作时经常会涉及到不同通道数据提取,在OpenCV中提供了很多比较便捷的操作函数,本文涉及函数如下: 1.cvtColor 颜色空间转换 2.convertTo 图片数据类型转换 3.spl ...

  8. 【学习OpenCV4】如何学习OpenCV

    OpenCV是应用非常广泛的开源视觉处理库,在图像处理.计算机视觉和自动驾驶中有着非常重要的作用. 废话不多说,我就来讲讲OpenCV的使用和学习需要怎么做吧,大家觉得有道理的可以参考一下. 我理解的 ...

  9. 通过opencv的函数进行图片修复:cv2.inpaint()

    库函数使用: dst = cv2.inpaint(src,mask, inpaintRadius,flags) 参数是: src:输入8位1通道或3通道图像. inpaintMask:修复掩码,8位1 ...

最新文章

  1. CF533A Berland Miners
  2. ISAIR2022征稿【中国・上海​, 2022年10月21-23日】
  3. 基于激光点云语义信息的闭环检测
  4. 使用jQuery实现ajax几种方法
  5. java的函数传值_java 函数形参传值和传引用的区别[转]
  6. 修改elementUI组件样式无效的问题研究
  7. 高中计算机应用基础试讲,试讲计算机应用基础.ppt
  8. Mysql 常用函数总结
  9. 如何控制Facebook投放广告成本,提高利润?
  10. php二分法实力,php常见的几种排序以及二分法查找
  11. java persistence.xml_java – 找不到persistence.xml
  12. 苹果+beta+软件测试计划,自讨苦吃:加入苹果Apple Beta版软件计划之后
  13. python如何安装numpy模块?
  14. Hadoop+Spark 之旅—脚踏实地、仰望星空(教程目录)
  15. 多多情报通:拼多多推广账户金额可以通用吗?里面钱可以提出来吗?
  16. php 2038年,php实现兼容2038年后Unix时间戳转换函数,2038unix_PHP教程
  17. 宜信唐宁:个人投资者做好资产配置至关重要
  18. 2014年11月3日至2014年12月29日
  19. 十年一觉扬州梦,赢得青楼薄幸名
  20. Office - PowerPoint文档异常的修复方法

热门文章

  1. AI大牛沈春华全职加入浙江大学!全球顶级学者专注CV,一年被引次数超9k+
  2. 当前国内时间管理软件产业(二)
  3. 【墨者学院】WebShell文件上传漏洞分析溯源(第4题)
  4. jQuery 事件 scroll() 方法的使用教程
  5. 浅谈秒杀系统架构设计
  6. python多进程实战——4k图片抓取
  7. 单片机原理与应用—基于C51及Proteus仿真 答案
  8. 如何获取Flickr图片链接地址作为外链图片
  9. C++计算长方形的周长和面积
  10. 实现74HC/HCT194的双向移位寄存器功能