opencv —— inpaint 图像修补、去除指定区域物体
实现图像修补、物体去除: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 图像修补、去除指定区域物体的更多相关文章
- opencv 6 图像轮廓与图像分割修复 3 图像的矩,分水岭,图像修补
图像的矩 矩的计算:moments()函数 计算轮廓面积:contourArea()函数 #include "opencv2/highgui/highgui.hpp" #inclu ...
- opencv学习之路(30)、分水岭算法及图像修补
一.简介 二.分水岭算法 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat srcImg = ...
- Halcon从某一个图片以指定区域绘制到另一个图像
************************************************************* * Halcon从某一个图片以指定区域绘制到另一个图像 * Author: ...
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
- 14、OpenCV实现图像的空间滤波——图像锐化及边缘检测
1.图像锐化理论基础 1.锐化的概念 图像锐化的目的是使模糊的图像变得清晰起来,主要用于增强图像的灰度跳变部分,这一点与图像平滑对灰度跳变的抑制正好相反.而且从算子可以看出来,平滑是基于对图像领域的加 ...
- Java基于opencv实现图像数字识别(二)—基本流程
Java基于opencv实现图像数字识别(二)-基本流程 做一个项目之前呢,我们应该有一个总体把握,或者是进度条:来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程. 我做的主要 ...
- [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (一)
部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 29 理解图像特征 目标本节我会试着帮你理解什么是图像特征,为什么图像特征很重要,为什么角点很重要等.29.1 解释 我相 ...
- Java基于opencv实现图像数字识别(五)—腐蚀、膨胀处理
腐蚀:去除图像表面像素,将图像逐步缩小,以达到消去点状图像的效果:作用就是将图像边缘的毛刺剔除掉 膨胀:将图像表面不断扩散以达到去除小孔的效果:作用就是将目标的边缘或者是内部的坑填掉 使用相同次数的腐 ...
- Java基于opencv实现图像数字识别(四)—图像降噪
Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...
随机推荐
- Halo-个人独立博客系统
项目地址:https://github.com/halo-dev/halo 安装指导:https://halo.run/guide/ 简介: Halo 是一款现代化的个人独立博客系统,给习惯写博客 ...
- Python3基础之内置模块
模块和包 一.定义: 模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的Python文件包:用来从逻辑上组织模块,本质就是一个目录(必须带有一个__in ...
- RSTP协议简介
RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层.RTSP以客户端方式工作,对流媒体提供播放.暂停.后退.前进等操作.该标准由IETF指 ...
- 自定义HttpMessageConverter实现RestTemplate的exchange方法返回自定义格式数据
一 概述 实现如下效果代码,且可正常获取到返回数据: ResponseEntity<JsonObject> resEntity = restTemplate .exchange(url, ...
- c++中多文件的组织
参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第八章 根据书中例子学习使用类的多文件项目. 首先要将类CBox定义成一个连贯的整体,在CBox.H文件中写入相关的类定义, ...
- Dwz/Jquery--使用Ajax提交表单时调用表单设置的校验
案例 今天有一个需求就是点击按钮时,使用ajax方式提交表单,而且不是直接用form表单下的submit按钮提交,表单中用的校验是dwz 自带的校验方式,表单模板如下: <li><d ...
- vuede axios文件下载
this.loading = true; this.$http({ baseURL: CLOUD_BASE_SERVER_URL, url: '/audit/auditRun/ex ...
- TypeError:Can't instantiate abstract class Ultraman with abstract methods sttack 报错
报错Can't instantiate abstract class Ultraman with abstract methods sttack 通过非常仔细的排查,发现错误如下: 1.单词拼写错误是 ...
- HDU_5094_dfs
http://acm.hdu.edu.cn/showproblem.php?pid=5094 bfs,vis[x][y][z],z表示钥匙的状态,用二进制来表示,key[x][y]储存当前位置钥匙的二 ...
- 使用Spring Cloud Feign 日志查看请求响应
在使用微服务时,常常会用feign做客户端去调用别的微服务,但是在日志中很难查看到具体的请求和响应.因此,需要把feign默认的日志打开. 日志设置 创建feign配置类 @Configuration ...