概述
图像污点修复
原理摘自:https://blog.csdn.net/qq_20823641/article/details/52252072
参考上图,Ω区域是待修复的区域;δΩ指Ω的边界);要修复Ω中的像素,就需要计算出新的像素值来代替原值。
现在假设p点是我们要修复的像素。以p为中心选取一个小邻域B(ε),该邻域中的点像素值都是已知的(只要已知的)。(这个ε就是opencv函数中参数 inpaintRadius)
现在假设p点是我们要修复的像素。以p为中心选取一个小邻域B(ε),该邻域中的点像素值都是已知的(只要已知的)。(这个ε就是opencv函数中参数 inpaintRadius)
核心函数:
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,修补方法的标识符
简单应用代码:
#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.4学习::图像污点修复所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复