Opencv2.4学习::图像污点修复

图像污点修复


 原理摘自: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);
}

实现效果:

猜你喜欢

转载自blog.csdn.net/dieju8330/article/details/82762707
今日推荐