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实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...
随机推荐
- CF572_Div2_F
题意 http://codeforces.com/contest/1189/problem/F 思考 由于是子序列,答案只跟选法有关,与顺序无关,先排序. 直接计算答案比较困难.联想到期望的无穷级数计 ...
- Nginx搭建过程
https://www.cnblogs.com/gscq073240/articles/6773000.html
- js解析json时报:Unexpected token s in JSON at position 0
原因肯定是返回的json格式有问题 最有可能是后台在程序执行过程中,输出了某些调试信息等等,这些输出的字符串和json拼接成了新的字符串来解析,这时就会报错: 比如我在入口文件里var_dump了__ ...
- docker 简单使用
1.docker 命令 docker start nginx https://www.w3cschool.cn/docker/windows-docker-install.html // docker ...
- Java 中的各种锁和 CAS + 面试题
Java 中的各种锁和 CAS + 面试题 如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一.因此下面 ...
- 面试官:"谈谈分库分表吧?"
转自:学习Java的小姐姐 www.cnblogs.com/chenchen0618/p/11624480.html 1.什么是分库分表 从字面上简单理解,就是将原本存储在一个库的数据分块存储在多个库 ...
- VS下解决_CRT_SECURE_NO_WARNINGS 警告
1.带有警告的文件加 #define _CRT_SECURE_NO_WARNINGS 2.右击工程 - 属性 - 配置属性 - C/C++ - 命令行 命令行增加 /D _CRT_SECURE_NO ...
- webdriver高级应用(2) - 滚动条操作
webdriver高级应用(2) - 滚动条操作 #-*- coding:utf-8 -*- from selenium import webdriver import unittest import ...
- shell命令之一天一见
一.在统计行数时常要用的到命令包括 w.c.l, 在这里做个简单的介绍. 语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也 ...
- 题解 CF1292A 【NEKO's Maze Game】
有一个结论: 当 \((1,1)\) 不能抵达 \((2,n)\) 时,必定存在一个点对,这两个点的值均为真,且坐标中的 \(x\) 互异,\(y\) 的差 \(\leq 1\) 这个结论的正确性感觉 ...