【opencv】示例-inpaint.cpp 图像修复是通过填充损坏图像部分从而修复这些损坏的过程...

0a711604d4a30bb5424a398fad00c4b1.png

原始图像

0adab1f376b64ce77850a6ca16ca3fcb.png

这段代码展示了一个使用OpenCV库进行图像修复的例子。它首先包含了处理图像编码、解码、显示、处理和照片处理所必要的OpenCV模块的头文件。然后利用cv和std命名空间下的类和方法。通过定义一个鼠标回调函数onMouse来处理图像上的绘图操作,并通过主函数main处理图像读取,修复与显示。

整体功能是:程序允许用户用鼠标在图像上绘制区域,然后用指定的修复算法(图像修复算法)来修复这些区域。用户可以通过按键来选择恢复原始图像或者运行修复算法,最后显示修复后的结果。

#include "opencv2/imgcodecs.hpp" // 包含OpenCV模块中处理图像编码和解码的头文件
#include "opencv2/highgui.hpp" // 包含OpenCV模块中用于创建界面以显示和保存图像和视频的头文件
#include "opencv2/imgproc.hpp" // 包含OpenCV模块中处理图像处理的头文件
#include "opencv2/photo.hpp" // 包含OpenCV模块中处理照片的头文件#include <iostream> // 包含标准输入输出流的头文件using namespace cv; // 使用命名空间cv,这样就可以直接使用OpenCV中定义的类和方法,而不需要加cv::前缀
using namespace std; // 使用命名空间std,便于使用标准库中的功能static void help( char** argv ) // 定义帮助函数,打印程序使用方法
{cout << "\nCool inpainging demo. Inpainting repairs damage to images by floodfilling the damage \n"<< "with surrounding image areas.\n""Using OpenCV version %s\n" << CV_VERSION << "\n""Usage:\n" << argv[0] <<" [image_name -- Default fruits.jpg]\n" << endl;cout << "Hot keys: \n""\tESC - quit the program\n""\tr - restore the original image\n""\ti or SPACE - run inpainting algorithm\n""\t\t(before running it, paint something on the image)\n" << endl;
}Mat img, inpaintMask; // 声明Mat类变量img和inpaintMask,分别用于存储图像和绘制修复区域的掩码
Point prevPt(-1,-1); // 声明Point类变量prevPt,并初始化为(-1,-1),用于存储上一个绘图点的位置static void onMouse( int event, int x, int y, int flags, void* ) // 定义鼠标回调函数,用于处理鼠标事件
{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) ){Point pt(x,y);if( prevPt.x < 0 )prevPt = pt;line( inpaintMask, prevPt, pt, Scalar::all(255), 5, 8, 0 ); // 在掩码图像上绘制白色线条line( img, prevPt, pt, Scalar::all(255), 5, 8, 0 ); // 在原图上绘制白色线条prevPt = pt;imshow("image", img); // 显示图像}
}int main( int argc, char** argv ) // 主函数入口
{cv::CommandLineParser parser(argc, argv, "{@image|fruits.jpg|}"); // 解析命令行参数help(argv); // 调用帮助函数显示使用方法string filename = samples::findFile(parser.get<string>("@image")); // 获取图像文件的路径Mat img0 = imread(filename, IMREAD_COLOR); // 读取图像文件if(img0.empty()) // 如果图像为空,则显示错误信息并返回{cout << "Couldn't open the image " << filename << ". Usage: inpaint <image_name>\n" << endl;return 0;}namedWindow("image", WINDOW_AUTOSIZE); // 创建显示图像的窗口img = img0.clone(); // 克隆原始图像inpaintMask = Mat::zeros(img.size(), CV_8U); // 创建掩码图像,并初始化所有像素为0imshow("image", img); // 显示原始图像setMouseCallback( "image", onMouse, NULL); // 设置鼠标回调函数for(;;) // 无限循环,等待用户输入{char c = (char)waitKey(); // 等待键盘输入if( c == 27 ) // 如果按下ESC键,则退出程序break;if( c == 'r' ) // 如果按下'r'键,则恢复原始图像{inpaintMask = Scalar::all(0);img0.copyTo(img);imshow("image", img);}if( c == 'i' || c == ' ' ) // 如果按下'i'键或空格键,则运行修复算法{Mat inpainted;inpaint(img, inpaintMask, inpainted, 3, INPAINT_TELEA); // 运行修复算法imshow("inpainted image", inpainted); // 显示修复后的图像}}return 0; // 程序结束
}
inpaint(img, inpaintMask, inpainted, 3, INPAINT_TELEA);

b92dc736ef29e7925a019db9d408919c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/811883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于大数据的全国热门景点数据可视化分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文将介绍如何使用Python中的Pandas库进行数据挖掘&#xff0c;并结合Flask Web框架实现一个旅游景点数据分析系统。该系统将包括以下功能模块&#xff1a;热门景点概况、景点星级与评分分析、景…

贪心:P2240 【深基12.例1】部分背包问题

目录 【深基12.例1】部分背包问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 代码实现 【深基12.例1】部分背包问题 题目描述 阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N ( N ≤ 100 ) N(N \le 100) N(N≤100) 堆金币&#xff0c;第 i i i 堆金币的总重…

如何使用 Grafana 监控文件系统状态

当 JuiceFS 文件系统部署完成并投入生产环境&#xff0c;接下来就需要着手解决一个非常重要的问题 —— 如何实时监控它的运行状态&#xff1f;毕竟&#xff0c;它可能正在为关键的业务应用或容器工作负载提供持久化存储支持&#xff0c;任何小小的故障或性能下降都可能造成不利…

已解决java.net.NoRouteToHostException: 无法到达主机异常的正确解决方法,亲测有效!!!

已解决java.net.NoRouteToHostException: 无法到达主机异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 检查网络连接 核实目标地址 检查防火墙和路由器规则 验证VPN/代理设置 修正网络配置 …

Django 实现登录功能

基本实现 路由 from django.urls import path from . import viewsapp_name index urlpatterns [path(, views.index, nameindex),path("login.html/", views.login, name"login"), ]视图 from django.shortcuts import render, redirect from django…

MR混合现实情景实训教学系统在旅游管理课堂上的应用

旅游管理是一门实践性很强的学科&#xff0c;需要学生掌握理论知识的同时&#xff0c;能够在实际工作中灵活运用。传统的课堂教学方式往往只能通过理论讲解和简单的模拟操作来培养学生的实践能力&#xff0c;而MR混合现实情景实训教学系统则可以为学生提供更加真实、生动的实践…

go第三方库go.uber.org介绍

Uber 是一家美国硅谷的科技公司&#xff0c;也是 Go 语言的早期 adopter。其开源了很多 golang 项目&#xff0c;诸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 将内部的 Go 风格规范 开源到 GitHub&#xff0c;经过一年的积累和更新&#xff0c;该规范已经初具规模…

HCIP-Datacom(H12-821)题库补充(4月12日)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 在BGP进程下&#xff0c;Aggregate命令中的detail&#xff3f;suppressed关键字的作用是以下哪一项&#xff1f; A&#xff1a;抑制生成的聚合路由下发IP路由表 B&…

vueRouter动态路由(实现菜单权限控制)

一、权限控制管理&#xff1a; 对于企业级的项目, 我们可能需要对项目做权限控制管理, 实现不同角色的用户登录项目根据所拥有的权限访问不同的页面内容&#xff0c;此时就需要使用到动态路由来对权限页面做限制。 【使用vue-router实现动态路由&#xff0c;达到实现菜单权限…

数据仓库的—数据仓库的体系架构

数据仓库通常采用分层的体系架构设计,作为支撑企业决策分析需求的数据基础设施。典型的数据仓库体系架构由以下三个核心层次组成: 源数据层(Source Layer) 这是数据仓库的数据来源,包括组织内部的各种运营系统,如ERP、CRM、SCM等,以及外部数据源如互联网、社交媒体等。这些系…

2023年全国职业技能大赛“信息安全与评估”国赛模拟题-windows应急响应+题目+WP

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步�…

React + three.js 实现人脸动捕与3D模型表情同步

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制React three.js 实现人脸动捕与3D模型表情同步 示例项目(github)&#xff1a;https://github.com/couchette/simple-react-three-facia…

BI数据分析软件:行业趋势与功能特点剖析

随着数据量的爆炸性增长&#xff0c;企业对于数据的需求也日益迫切。BI数据分析软件作为帮助企业实现数据驱动决策的关键工具&#xff0c;在当前的商业环境中扮演着不可或缺的角色。本文将从行业趋势、功能特点以及适用场景等方面&#xff0c;深入剖析BI数据分析软件&#xff0…

LeetCode:1两数之和 C语言

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以…

IP证书申请流程

目录 域名与IP的关系 SSL证书绑定域名还是绑定IP&#xff1f; IP证书支持免费申请吗&#xff1f; 如何申请IP地址证书 IP类型的SSL证书&#xff0c;又称之为IP SSL&#xff0c;这种SSL证书是专门用于公网IP地址验证的一种数字证书。 主要功能就是解决IP地址明文传输的安全…

毅四捕Go设计模式笔记——代理模式

代理模式&#xff08;Proxy Pattern&#xff09; 为了解决什么问题&#xff1f; 代理模式用于在不直接访问实际对象的情况下&#xff0c;通过引入一个代理对象来控制和管理对该对象的访问。主要解决的问题是对原始对象的访问控制&#xff0c;以及在不改变原始对象接口的情况下…

IvorySQL 3.2原理解析|与Oracle 12c XML函数兼容性的实现机制

[发行日期&#xff1a;2024年4月11日] IvorySQL 3.2基于PostgreSQL 16.2&#xff0c;引入了多种Oracle XML函数的全面兼容性功能&#xff0c;同时修复了多个问题&#xff0c;更多信息请参考文档网站。 >>>新版本体验链接&#xff1a; https://docs.ivorysql.org/cn…

bilibili PC客户端架构设计——基于Electron

众所周知&#xff0c;bilibili是个学习的网站&#xff0c;网页端和粉版移动端都非常的好用&#xff0c;不过&#xff0c;相对其它平台来说bilibili的PC客户端也算是大器晚成了。在有些场景PC客户端的优势也是显而易见的&#xff0c;比如&#xff0c;跓留电脑桌面的快捷、独立的…

加载 docker 镜像文件 centos7 系统 lnmp 环境 php8.2 php5.2 php7.4

# 加载镜像从tar文件 链接&#xff1a;https://pan.baidu.com/s/1s2yf7iroI-tBTK5b9zxxnA 提取码&#xff1a;6666 docker load < my_migration_image.tar # 运行新容器&#xff0c;可以使用相同的参数和命令 8233 电脑访问时对应的端口 80 docker 上的nginx 端口号 …

塔面板php7.37.4版本不支持ZipArchive手工安装扩展方法

centos 7 宝塔面板安装的PHP7.3和7.4默认已经不带zip扩展&#xff0c;要手工安装zip扩展首先需要安装libzip&#xff0c; yum -y install libzip 方法如下&#xff1a; 宝塔面板php7.3版本在SSH命令行界面执行以下语句&#xff1a; cd /www/server/php/73/src/ext/zip/ /ww…