iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ OpenCV如何实现图像修复功能
  • 408
分享到

C++ OpenCV如何实现图像修复功能

2023-06-26 04:06:41 408人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关c++ OpenCV如何实现图像修复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言下面将使用OpenCV C++ 对有瑕疵的图像进行

本篇文章给大家分享的是有关c++ OpenCV如何实现图像修复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

前言

下面将使用OpenCV C++ 对有瑕疵的图像进行修复。OpenCV 提供了inpaint api可进行图像修复。

一、OpenCV inpaint

C++ OpenCV如何实现图像修复功能

原图如图所示。本案例的需求是希望能够将图像上的红线给消除。OpenCV 提供的inpaint API能够实现这个效果。

void inpaint(

InputArray src, 原图

InputArray inpaintMask, 二进制掩模,指示要修复的像素

OutputArray dst, 目标图像

double inpaintRadius, 像素周围的邻域补绘。通常,如果要修复的区域很小,则使用较小的值仅产生较少模糊

int flags INPAINT_NS 或 INPAINT_TELEA

)

使用这个API最重要的就是生成一张二进制掩模图像(要修复的地方)。我们可以使用鼠标响应事件完成。

//使用鼠标响应事件在 inpaintMask 绘制掩模,用于图片修复if (event == EVENT_LBUTTONUP || !(flags & EVENT_FLAG_LBUTTON)){prevPt = Point(-1, -1);}else if (event == EVENT_LBUTTONDOWN){prevPt = Point(x, y);}else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON)){prevPt = Point(x, y);//绘制掩模图像circle(inpaintMask, prevPt, 2, Scalar::all(255), -1);//imshow("inpaintMask", inpaintMask);//图像修复Mat result;inpaint(src, inpaintMask, result, 1, INPAINT_NS);//imshow("image", result);}

C++ OpenCV如何实现图像修复功能

如图为掩模图像,接下来使用inpaint就可以对图像进行修复了。

二、源码

#include <iOStream>#include<opencv2/opencv.hpp>#include<opencv2/photo.hpp>using namespace cv;using namespace std;Mat src, inpaintMask;Point prevPt(-1, -1);static void onMouse(int event, int x, int y, int flags, void*){//使用鼠标响应事件在 inpaintMask 绘制掩模,用于图片修复if (event == EVENT_LBUTTONUP || !(flags & EVENT_FLAG_LBUTTON)){prevPt = Point(-1, -1);}else if (event == EVENT_LBUTTONDOWN){prevPt = Point(x, y);}else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON)){prevPt = Point(x, y);//绘制掩模图像circle(inpaintMask, prevPt, 2, Scalar::all(255), -1);//imshow("inpaintMask", inpaintMask);//图像修复Mat result;inpaint(src, inpaintMask, result, 1, INPAINT_NS);//imshow("image", result);}}int main(){src = imread("girl.jpg");if (src.empty()){cout << "No Image!" << endl;system("pause");return -1;}namedWindow("image", WINDOW_AUTOSIZE);imshow("image", src);inpaintMask = Mat::zeros(src.size(), CV_8U);  //二进制掩模,指示要修复的像素setMouseCallback("image", onMouse, NULL);waiTKEy(0);destroyAllwindows();system("pause");return 0;}

三、效果显示

C++ OpenCV如何实现图像修复功能

如图为使用inpaint修复的效果,可以看出基本上将瑕疵都给去掉了。

以上就是C++ OpenCV如何实现图像修复功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网其他教程频道。

--结束END--

本文标题: C++ OpenCV如何实现图像修复功能

本文链接: https://www.lsjlt.com/news/306796.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ OpenCV如何实现图像修复功能
    本篇文章给大家分享的是有关C++ OpenCV如何实现图像修复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言下面将使用OpenCV C++ 对有瑕疵的图像进行...
    99+
    2023-06-26
  • C++OpenCV实现图像修复功能
    目录前言一、OpenCV inpaint二、源码三、效果显示前言 本文将使用OpenCV C++ 对有瑕疵的图像进行修复。OpenCV 提供了inpaint API可进行图像修复。 ...
    99+
    2024-04-02
  • C++OpenCV实现图像去水印功能
    目录前言一、水印定位二、图像修复三、效果显示四、源码总结前言 本文将使用OpenCV C++ 进行简单图像水印去除。我们在网上download图片时,经常因为版权问题有水印。本案例通...
    99+
    2024-04-02
  • OpenCV中图像如何实现分割与修复
    这篇文章给大家分享的是有关OpenCV中图像如何实现分割与修复的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景图像分割本质就是将前景目标从背景中分离出来。在当前的实际项目中,应用传统分割的并不多,大多是采用深度...
    99+
    2023-06-29
  • Android基于OpenCV实现图像修复
    目录图像修复API操作效果源码图像修复 实际应用中,图像常常容易受损,如存在污渍的镜头、旧照片的划痕、人为的涂画(比如马赛克),亦或是图像本身的损坏。将受到损坏的图像尽可能还原成原...
    99+
    2024-04-02
  • 基于OpenCv与JVM如何实现加载保存图像功能
    今天给大家介绍一下基于OpenCv与JVM如何实现加载保存图像功能。,文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。加载图片openCv有一个名imread的简...
    99+
    2023-06-26
  • OpenCv实现绘图功能
    本文实例为大家分享了OpenCv实现绘图功能的具体代码,供大家参考,具体内容如下 绘制一个图像在上面画线: import numpy as np import matplotli...
    99+
    2024-04-02
  • C语言如何实现BMP图像读写功能
    这篇文章给大家分享的是有关C语言如何实现BMP图像读写功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C语言实现BMP图像的读写对于刚接触数字图像的同学,应该都有一个疑问,如何把一个BMP格式的图像用纯C语言读...
    99+
    2023-06-14
  • Python+Opencv实现图像匹配功能(模板匹配)
    本文实例为大家分享了Python+Opencv实现图像匹配功能的具体代码,供大家参考,具体内容如下 1、原理 简单来说,模板匹配就是拿一个模板(图片)在目标图片上依次滑动,每次计算模...
    99+
    2024-04-02
  • 使用C++如何实现PatchMatch图像修复算法
    今天小编给大家分享的是使用C++如何实现PatchMatch图像修复算法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。PatchMatch算法出自Barnes的论文PatchMatc...
    99+
    2023-06-14
  • OpenCV如何使用GrabCut实现抠图功能
    这篇文章主要介绍“OpenCV如何使用GrabCut实现抠图功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“OpenCV如何使用GrabCut实现抠图功能”文章能帮助大家解决问题。1、概述案例:使...
    99+
    2023-07-05
  • Python+OpenCV实现图像识别替换功能详解
    OpenCV-Python是一个Python库,旨在解决计算机视觉问题。 OpenCV是一个开源的计算机视觉库,1999年由英特尔的Gary Bradski启动。Bradski在访学...
    99+
    2024-04-02
  • C++实现PatchMatch图像修复算法
    PatchMatch算法出自Barnes的论文 PatchMatch: A Randomized Correspondence Algorithm for Structural I...
    99+
    2024-04-02
  • C++和OpenCV如何实现图像字符化效果
    今天小编给大家分享一下C++和OpenCV如何实现图像字符化效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现原理图像字...
    99+
    2023-06-30
  • c++图像识别功能怎么实现
    要实现C++图像识别功能,你可以使用图像处理库和机器学习库来完成。以下是一种可能的实现方法: 安装和配置OpenCV库:Open...
    99+
    2023-10-24
    c++
  • 基于OpenCv与JVM实现加载保存图像功能(JAVA 图像处理)
    目录加载图片保存图片加载图片 openCv有一个名imread的简单函数,用于从文件中读取图像 imread 函数位于Imgcodecs类的同名包中。 加载图片代码 import ...
    99+
    2024-04-02
  • opencv如何实现图像几何变换
    这篇文章给大家分享的是有关opencv如何实现图像几何变换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。图像伸缩(cv2.resize)图像的扩大与缩小有专门的一个函数,cv2.resize(),那么关于伸缩需要...
    99+
    2023-06-14
  • C++ OpenCV如何实现图像双三次插值算法
    本篇内容主要讲解“C++ OpenCV如何实现图像双三次插值算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ OpenCV如何实现图像双三次插值算法”吧!一、图像双三...
    99+
    2023-06-21
  • 如何利用C++ OpenCV 实现从投影图像恢复仿射特性
    如何利用C++ OpenCV 实现从投影图像恢复仿射特性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。原理我们通过相机拍摄的图片存在各种畸变,其中投影畸...
    99+
    2023-06-21
  • opencv如何实现图像旋转效果
    小编给大家分享一下opencv如何实现图像旋转效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!图像旋转:在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩阵进行变换参数:实现代码:import ...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作