我是靠谱客的博主 有魅力牛排,这篇文章主要介绍Opencv2.4学习::图像污点修复,现在分享给大家,希望可以做个参考。

图像污点修复


 原理摘自:https://blog.csdn.net/qq_20823641/article/details/52252072

参考上图,Ω区域是待修复的区域;δΩ指Ω的边界);要修复Ω中的像素,就需要计算出新的像素值来代替原值。

现在假设p点是我们要修复的像素。以p为中心选取一个小邻域B(ε),该邻域中的点像素值都是已知的(只要已知的)。(这个ε就是opencv函数中参数 inpaintRadius)

现在假设p点是我们要修复的像素。以p为中心选取一个小邻域B(ε),该邻域中的点像素值都是已知的(只要已知的)。(这个ε就是opencv函数中参数 inpaintRadius)


核心函数:

复制代码
1
void inpaint(InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags)
  • InputArray类型的src,也就是输入图像,用Mat类对象就可以了。并且要是8位单通道或者三通道图像。
  • InputArray类型的inpaintMask,修复掩膜,为8位单通道图像。其中非0像素表示要修复的区域。
  • OutputArray类型的dst,函数调用后的运算结果保存在这里,和输入图像有着一样的大小和类型。
  • double类型的inpaintRadius,需要修补的每个点的圆形邻域,为修复算法参考的半径。
  • int类型的flags,修补方法的标识符

简单应用代码:

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<opencv2/core/core.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/core/core.hpp> #include<opencv2/opencv.hpp> #include<opencv2/photo/photo.hpp> #include<iostream> using namespace std; using namespace cv; void main() { Mat srcImage = imread("F:\opencv_re_learn\2_inpaint.jpg"); if (!srcImage.data){ cout << "falied to read" << endl; system("pause"); return; } imshow("srcImage", srcImage); Mat srcGray; cvtColor(srcImage, srcGray, CV_BGR2GRAY); //中值滤波去噪点 medianBlur(srcGray, srcGray, 1.5); //二值化提取修复区域 Mat srcThres; threshold(srcGray, srcThres, 242, 255, CV_THRESH_BINARY); imshow("inpaintMask", srcThres); //修复图像 Mat inpaint_result; inpaint(srcImage, srcThres, inpaint_result, 1, INPAINT_TELEA); imshow("inpaint_result", inpaint_result); waitKey(0); }

实现效果:

最后

以上就是有魅力牛排最近收集整理的关于Opencv2.4学习::图像污点修复的全部内容,更多相关Opencv2内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部