我是靠谱客的博主 有魅力牛排,最近开发中收集的这篇文章主要介绍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);
}

实现效果:

最后

以上就是有魅力牛排为你收集整理的Opencv2.4学习::图像污点修复的全部内容,希望文章能够帮你解决Opencv2.4学习::图像污点修复所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部