opencv进行图像复原

简介

  本篇是讲用opencv函数:inpaint来进行图像复原。

前提准备

inpaint函数

  void cvInpaint(const CvArr* src, const CvArr* inpaint_mask, CvArr* dst, double inpaintRange, int flags)
  src:          需要处理的原图像。
  inpaint_mask:图像掩码。(简单的说,就是表示src中需要被修复的图像位置)
  dst:          处理后生产的复原图片。
  inpaintRange:修复算法取临近值的半径。
  flags:        选择Inpainting使用的复原算法:INPAINT_NS 或者 INPAINT_TELEA

实例代码

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <math.h>
#include <string.h>
#include <opencv/cv.h>
#include <stdio.h>
#include "opencv2/photo/photo.hpp"

using namespace cv;

int pic_info[4];
char pic_name[20];
Mat mat1, imageROI, dst;
int width, height;
IplImage src, roi, dstI;

void on_mouse( int event, int x, int y, int flags, void* ustc){
	if(event == CV_EVENT_LBUTTONDOWN){
		pic_info[0] = x;   /*width1*/
		pic_info[1] = y;   /*height1*/
		pic_info[2] = 0;   /*width2*/
		pic_info[3] = 0;   /*height2*/
	}
	if(flags == CV_EVENT_FLAG_LBUTTON){
		pic_info[2] = x;
		pic_info[3] = y;

		cvZero(&roi);
		cvZero(&dstI);

		rectangle(imageROI, cvPoint(pic_info[0], pic_info[1]),cvPoint(pic_info[2], pic_info[3]),cvScalar(255,255,255), -1);

		inpaint(mat1, imageROI, dst, 1, CV_INPAINT_TELEA);

		imshow("2", imageROI);
		imshow("3", dst);
	}
}

int main(int agrc, char *argv[]){
	memcpy(pic_name,argv[1], sizeof(argv[1]));
	mat1 = cv::imread(argv[1]);
	src = mat1;
	width = mat1.rows;
	height = mat1.cols;

	imageROI = cv::Mat(width, height,CV_8UC1,cv::Scalar(0, 0, 0));
	dst = cv::Mat(width, height,CV_8UC3,cv::Scalar(0, 0, 0));
	roi = imageROI;
	dstI = dst;

	imshow("1", mat1);
	cvSetMouseCallback("1", on_mouse, NULL);

	cv::waitKey(0);
	return 0;
}
  代码中src为原图像,roi为图像掩码,dstI为结果图像。
也是利用鼠标的拖拽,在和src同样大小的ROI中生成白色矩形。该矩形在inpaint函数中就表示需要被修复的位置和大小,最后将修复后的结果图像dstI输出显示。

效果演示

  原图像
                                          
  掩码图像
                                          
  结果图像
                                          
时间: 2024-11-02 14:14:04

opencv进行图像复原的相关文章

Opencv图像识别从零到精通(31)----图像修补,分离合并通道

一.图像修复简介 图像修复是图像复原中的一个重要内容,其目的是利用图像现有的信息来恢复丢失的信息.可用于旧照片中丢失信息的恢复,视频文字去除以及视频错误隐藏等.简言之,图像修复就是对图像上信息缺损区域进行信息填充的过程,其目的就是为了对有信息缺损的图像进行复原,并且使得观察者无法察觉到图像曾经缺损或者已经修复      图像修复技术简单来说,就是利用那些被破坏区域的边缘,即是边缘的颜色和结构,繁殖和混合到损坏的图像中,来进行修复图像 目前存在两大类图像修复技术:一类是用于修复小尺度缺损的数字图像

opencv实现人像优化

简介 本篇是使用opencv,简单实现人像优化功能:美白.肤色.祛斑和磨皮.注:本篇所使用的图片来源自网络. 具体实现 总体框架 1.使用到了之前教程中的opencv实现button控件,每个功能,对应一个控件选择,然后都分别使用一个Trackbar,来手动控制,对图片处理的强度. 首先打开两幅图片,一张是作为操作选项的背景图片img,另一张是我们需要处理的图片dst_img,接着在在img显示窗口上,进行button的初始化 ButtonShow操作.最后分别对背景图片img和操作图片dst_

MAC平台下Xcode配置使用OpenCV的具体方法 (2016最新)

1.序言: 1.1 背景 本人小白一枚,不过因为最近在从事机器视觉方面的工作,所以接触到OpenCV. 因为工作需求,本人要在MAC端使用OpenCV实现一些视觉功能,配置环境成了最大的阻碍,网上查了很多相关资料和博客,都因为版本环境问题屡试屡败,不过经历重重尝试,笔者最终还是配置成功并运行了自己的源码.当然成功的关键还是因为笔者站在了巨人的肩膀上,借鉴了很多网上的教程,为了不误导大家配置的过程,参考文章的地址统一放在文章里,望各位大大看见之后能够理解,废话不说进入正题. 1.2 环境说明 如果

Ubuntu16.04安装tensorflow+安装opencv+安装openslide+安装搜狗输入法

Ubuntu16.04在cuda以及cudnn安装好之后,安装tensorflow,tensorflow以及opencv可以到网上下载对应的安装包并且直接在安装包所在的路径下直接通过pip与conda进行安装,如下图所示: 前提是要下载好安装包.安装好tensorflow之后还需要进行在~/.bashrc文件中添加系统路径,如下图所示 Openslide是医学图像一个重要的库,这里给出三条命令进行安装 sudo apt-get install openslide-tools sudo apt-g

关于opencv的文件配置详细内容

原文链接:http://blog.csdn.net/zhuce0001/article/details/21279527 最近在做opencv的一些代码的修修补补的工作: 但在此之前,根本没接触过cpp,更别谈vs,opencv 最近一段时间改代码,感觉自己学习很多东西,在这个过程中一直不断查资料,也没有时间去好好整理一下,但是查资料的过程中发现很多很好的博客,就记录下来方便自己日后查询,很感谢这些热爱分享的大佬 一.只对当前工程起作用的设置1. 设置头文件包含路径   工程上右击,选择"属性&

什么是图像 -- opencv基础

opencv基础篇--到底什么是图像 什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image.这两者虽然是形容同一个东西,但却又有着区别.picture代表实而有物的真实图像:而image代表着计算机中存储的图像,也代表想象中的图像. 而我们更多研究的便是image,计算机图像从广义地可分为矢量图和像素图(位图).矢量图,是由一系列计算机指令描述和记录的一幅图,一幅图可以解为一系列由点.线.面等组成的子图.像素图,则是由很多个点组成的,每个点都是由二进制数据来描述和存储其

OpenCV点滴3

这段时间想稍微系统地学下: 1.Mat-基本图像容器: OpenCV函数中输出图像的内存分配是自动完成的(如果不特别指定的话). 使用OpenCV的C++接口时不需要考虑内存释放问题. 赋值运算符(=)和拷贝构造函数( Mat A,Mat B(A) )只拷贝信息头. 使用函数 clone() 或者 copyTo() 来拷贝一副图像的矩阵. Mat M(2,2, CV_8UC3, Scalar(0,0,255)); 行数,列数,8位,3通道,指定的值初始化: Point2f P(5,1) -->[

OpenCV教程

<OpenCV3编程入门>内容简介&勘误&配套源代码下载 [OpenCV入门教程之十八]OpenCV仿射变换 & SURF特征点描述合辑 [OpenCV入门教程之十七]OpenCV重映射 & SURF特征点检测合辑 [OpenCV入门教程之十六]OpenCV角点检测之Harris角点检测 [OpenCV入门教程之十五]水漫金山:OpenCV漫水填充算法(Floodfill) [OpenCV入门教程之十四]OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑 [Ope

Kinect2入门+opencv画骨架+骨架数据

////////////////////////////准备工作/////////////////////////////// 首先需要下载安装Kinect2的SDK,下载地址如下: https://www.microsoft.com/en-us/download/details.aspx?id=44561 建议安装时从官网下载,之前有出现过拷贝的文件无法正常安装的情况. //注意V2.0以下版本为一代Kinect所用,一代Kinect推荐V1.8 相对于一代的Kinect,二代由于SDK只出过