inpaint-图像修补算法
图像的修补技术由inpaint函数实现,它可以用来从扫描的照片中清除灰尘和划痕,或者从静态图像或视屏中去除不需要的物体。
函数原型C++:
void inpaint( InputArray src, InputArray inpaintMask, OutputArray dst,double inpaintRadius, int flags )
1)InputArray类型的src,输入图像,填Mat类的对象即可,且需要8位单通道或者三通道图像;
2)InputArray类型的inpaintMask,修复掩膜,为8位的单通道图像。其中的非零像素表示需要修补的区域;
3)OutputArray类型的dst,函数调用后的运算结果存在这里,和源图片有一样的尺寸和类型;
4)double类型的inpaintRadius,需要修补的每个点的圆形领域,为修复算法的参考半径。
5)int类型的flags,修补方法的标识符,可以是:
INPAINT_NS: 基于Navier-Stokes方程的方法
INPATNT_TELEA: Alexandru Telea方法
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/photo/photo.hpp>
#include <iostream>
using namespace cv;
using namespace std;#define WINDOW_NAME1 "原始图"
#define WINDOW_NAME2 "修补后的效果图"Mat srcImage1, inpaintMask;
Point previousPoint(-1, -1);static void on_Mouse(int event, int x, int y, int flags, void*)
{/*鼠标左键弹起消息*/if (event == EVENT_LBUTTONUP || !(flags & EVENT_FLAG_LBUTTON))previousPoint = Point(-1, -1);/*鼠标左键按下消息*/else if (event == EVENT_LBUTTONDOWN)previousPoint = Point(x, y);/*鼠标按下并移动,进行绘制*/else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON)){Point pt(x, y);if (previousPoint.x < 0)previousPoint = pt;line(inpaintMask, previousPoint, pt, Scalar::all(255), 5, 8, 0);//画白线line(srcImage1, previousPoint, pt, Scalar::all(255), 5, 8, 0);//画白线previousPoint = pt;imshow(WINDOW_NAME1, srcImage1);}
}int main()
{Mat srcImage = imread("me.jpg", -1);srcImage1 = srcImage.clone();inpaintMask = Mat::zeros(srcImage1.size(), CV_8U);imshow(WINDOW_NAME1, srcImage1);/*设置鼠标回调消息*/setMouseCallback( WINDOW_NAME1, on_Mouse, 0 );while (1){char c = (char)waitKey();if (c == 27)break;/*恢复成原始图像*/if (c == '2'){inpaintMask = Scalar::all(0); //0就是不需要修补的部分srcImage.copyTo(srcImage1);imshow(WINDOW_NAME1, srcImage1);}if (c == '1'){Mat inpaintedImage;inpaint(srcImage1, inpaintMask, inpaintedImage, 3, INPAINT_TELEA);imshow(WINDOW_NAME2, inpaintedImage);}}return 0;
}
运行结果:
inpaint-图像修补算法相关推荐
- 基于等照度线和窗口匹配的图像修补算法
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一.关于图像修补 图像修补的目的是基于已有的图像信息或数据库内信息,对缺失区域进行合理地修复.在 ...
- 图像处理:基于cv2.inpaint()图像修补
前言 今天我们将学习如何通过一种"修复"的方法消除旧照片中的小噪音,笔画等.当然,经过我的测试你也可以将其用于削弱混杂了其他的颜色的图像. 实验背景 大多数人家都会有一些旧的的旧化 ...
- Image inpainting 图像修补最新综述
点击我爱计算机视觉标星,更快获取CVML新技术 前几天52CV发布了一篇图像修补(Image Inpainting)的文章:AI魔法手!用算法修复老照片,引起了不少朋友关注,有位朋友问有没有图像修补的 ...
- OpenCV4.5.5学习笔记(十七):分水岭算法watershed(),图像修补inpaint()
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.分水岭算法watershed() 二.图像修补inpaint() 总结 前言 笔者本科时候有幸接触了OpenCV3 ...
- 图像轮廓、凸包、图像的矩、分水岭算法、图像修补
文章目录 1.查找并绘制轮廓 1.1 寻找轮廓:findContours() 函数 1.2 绘制轮廓:drawContours() 函数 1.3 示例程序:轮廓查找 1.4 综合示例:查找并绘制轮廓 ...
- python 快速行进 算法 图像修补
图像修复 很多时候遇到受损的图片我们需要利用机器视觉的手段对其进行修复,opencv中提供了inpaint函数实现了这一功能. 1.先来看一个例子 首先读入图片: import numpy as np ...
- OpenCV学习笔记(十七):图像修补:inpaint()
OpenCV学习笔记(十七):图像修补:inpaint() inpaint()函数 使用区域邻域在图像中还原选定区域. void inpaint( InputArray src, // 表示要修复的图 ...
- cv2图像修补inpaint
本篇博客主要介绍cv2模块中的图像修补inpaint. cv2中主要提供了两种进行图像修补的算法: 1.基于快速行进算法 cv2.INPAINT_TELEA. 2.基于流体动力学并使用了偏微分方程 c ...
- opencv图像修补-inpaint函数
图像修复技术原理:利用已被破坏的边缘,即边缘的颜色和结构,繁殖和混合到损坏的图像中,已达到图像修补的目的. 运用场合:在实际运用中,图像常常会被噪声腐蚀,这些噪声有可能是镜头上的灰尘.水滴,或者是旧图 ...
- opencv之分水岭算法分割及图像修补
1)分水岭算法 原理: 任何一幅灰度图像都可以被看成是拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷,我们向每一个山谷中灌不同颜色的水,随着水位的升高,不同山谷的水就会相遇汇 ...
最新文章
- 设计输出实数的格式,实数用%6.2f格式输出
- 怎么提高面试成功率?
- UIImageJPEGRepresentation和UIImagePNGRepresentation
- mybatis学习(22):查询排序
- 瑞士信贷上调苹果目标价至168美元
- Exchange2010部署 配置证书
- 有项目管理模板提供吗?(模板和管理工具对过程改进的帮助)
- html边框流动效果,采用css实现流动的边框
- 送给梨花仙子国的礼物
- Python学习_基础_29_面向对象编程之多态、鸭子类型
- ARM发展史,初步汇总
- 2010QQ游戏登录器(分析+感叹)
- 下列各命令中可以在计算机屏幕上,下列各命令中,可以在计算机屏幕上放映演示文稿的是()。...
- 不允许使用不完整的类型_孩子,我允许你不优秀,但我不允许你不努力!
- OpenCV ERROE **: 02:07:27.741:GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the ...
- DSP和MCU的区别
- 基于stm32的mpu6050传感器实验
- 24c0x读写 大于256字节读写方式,以24c08为例(24c04/08/16同理)
- Shopee关联广告和关键词广告有什么不同?如何优化广告关键词?
- linux查看磁带库设备,AIX中如何确定磁带库设备和操作系统设备文件的对应关系...