实现图像修补、物体去除:inpaint 函数

void inpaint(InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags);

  • src,输入图像,即源图像,填 Mat 类对象即可。但需是 8 位单通道或三通道图像。
  • inpaintMask,修复掩膜,为 8 位单通道图像。其中非零像素为需要修补的区域。
  • dst,输出图像,需要和源图像有相同的尺寸和类型。
  • inpaintRadius,圆形邻域半径。
  • flags,修补方法的标识符,两种选择:
标识符 说明
INPAINT_TELEA 基于 Navier-Stokes 方程的方法
INPAINT_NS Alexandru Telea 方法

代码示例:

//该程序功能为:消除鼠标选择的矩形区域内的物体
#include<opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
Mat src, back, dst;
Point pre, now;
bool draw = false;
RNG rngs = { };
Scalar colors;
void on_mouse(int event, int x, int y, int flags, void *param) {//鼠标操作响应函数
switch (event){
case EVENT_LBUTTONDOWN://按下左键
draw = true;
pre = Point(x, y);
break;
case EVENT_MOUSEMOVE://鼠标移动
if (draw) {
Mat tem = dst.clone();
now = Point(x, y);
colors = Scalar(rngs.uniform(, ), rngs.uniform(, ), rngs.uniform(, ));
rectangle(tem, pre, now, colors);
imshow("dst", tem);
}
break;
case EVENT_LBUTTONUP://左键抬起
draw = false;
rectangle(back, pre, now, Scalar(), -);//在 修复掩膜 图像中绘制选择区域
inpaint(dst, back, dst, , INPAINT_TELEA);//修复图像
imshow("dst", dst);
break;
}
}
int main() {
src = imread("C:/Users/齐明洋/Desktop/示例图片/1.jpg");
imshow("src", src); namedWindow("dst");
dst = src.clone();
imshow("dst", dst);
back = Mat::zeros(src.size(), CV_8UC1);//修复掩膜
setMouseCallback("dst", on_mouse);//https://www.cnblogs.com/bjxqmy/p/11914601.html waitKey();
}

效果演示:

opencv —— inpaint 图像修补、去除指定区域物体的更多相关文章

  1. opencv 6 图像轮廓与图像分割修复 3 图像的矩,分水岭,图像修补

    图像的矩 矩的计算:moments()函数 计算轮廓面积:contourArea()函数 #include "opencv2/highgui/highgui.hpp" #inclu ...

  2. opencv学习之路(30)、分水岭算法及图像修补

    一.简介 二.分水岭算法 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat srcImg = ...

  3. Halcon从某一个图片以指定区域绘制到另一个图像

    ************************************************************* * Halcon从某一个图片以指定区域绘制到另一个图像 * Author: ...

  4. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  5. 14、OpenCV实现图像的空间滤波——图像锐化及边缘检测

    1.图像锐化理论基础 1.锐化的概念 图像锐化的目的是使模糊的图像变得清晰起来,主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反.而且从算子可以看出来,平滑是基于对图像领域的加 ...

  6. Java基于opencv实现图像数字识别(二)—基本流程

    Java基于opencv实现图像数字识别(二)-基本流程 做一个项目之前呢,我们应该有一个总体把握,或者是进度条:来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程. 我做的主要 ...

  7. [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (一)

    部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 29 理解图像特征 目标本节我会试着帮你理解什么是图像特征,为什么图像特征很重要,为什么角点很重要等.29.1 解释 我相 ...

  8. Java基于opencv实现图像数字识别(五)—腐蚀、膨胀处理

    腐蚀:去除图像表面像素,将图像逐步缩小,以达到消去点状图像的效果:作用就是将图像边缘的毛刺剔除掉 膨胀:将图像表面不断扩散以达到去除小孔的效果:作用就是将目标的边缘或者是内部的坑填掉 使用相同次数的腐 ...

  9. Java基于opencv实现图像数字识别(四)—图像降噪

    Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...

随机推荐

  1. .NET 框架设计 - 模式、配置、工具 Demo 搜索

    ps:http://www.ituring.com.cn/article/195770 看完第二章,我也忍了!但是随着第三章“副本”的开启,我的阅读速度开始慢慢的减缓,虽然对其中每一个程序模式的理论也 ...

  2. 使用dlib自带的面向梯度直方图(HOG)和线性分类器方法来检测人脸

    之前使用opencv里面CascadeClassifier(级联分类器)来识别人脸, 下面使用dlib库来实现人脸识别. dlib是一个开源的库,它包含了很多内容有机器学习,图像处理,数值算法等等. ...

  3. 【WPF学习】第二十五章 日期控件

    WPF包含两个日期控件:Calender和DatePicker.这两个控件都被设计为允许用户选择日期. Calendar控件显示日期,在与Windows操作系统中看到的日历(例如,当配置系统日期时看到 ...

  4. COCOAPI for windows error!

    refer this https://github.com/philferriere/cocoapi However, you may encounter a bug where you cannot ...

  5. 【WPF学习】第四章 加载和编译XAML

    前面已经介绍过,尽管XAML和WPF这两种技术具有相互补充的作用,但他们也是相互独立的.因此,完全可以创建不使用XAML和WPF应用程序. 总之,可使用三种不同的编码方式来创建WPF应用程序: 只使用 ...

  6. Shell考题初级篇

    将当前目录下大于10K的文件转移到/tmp目录下 find . -type f -size +10k -exec mv {} /tmp \; 编写一个shell,判断用户输入的文件是否是一个字符设备文 ...

  7. linux 内存使用分析

      查看当前内存使用情况,最常用的指令就是 [root@t ~]# free -m total used free shared buffers cached Mem: -/+ buffers/cac ...

  8. SVM(1)模式识别课堂笔记

    引言:当两类样本线性可分时,针对我们之前学习的感知机而言,存在多个超平面能将数据分开,这里要讨论什么样的分类面最好的问题.为此,我们形式化的定义了最优分类超平面,他有两点特征:1.能将训练样本没有错误 ...

  9. js中函数this的指向

    this 在面试中,js指向也常常被问到,在开发过程中也是一个需要注意的问题,严格模式下的this指向undefined,这里就不讨论. 普通函数 记住一句话哪个对象调用函数,该函数的this就指向该 ...

  10. 安装MySQL出现[Errno 256] No more mirrors to try

    今天安装数据库时出现错误提示,如下图: 解决办法如下: yum clean all #清除仓库缓存 yum makecache #将服务器包信息缓存到本地 然后再执行数据库安装指令 yum insta ...