C++ OpenCV如何实现图像修复功能
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,本篇文章给大家分享的是有关C++ OpenCV如何实现图像修复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言下面将使用OpenC
千家信息网最后更新 2025年11月11日C++ OpenCV如何实现图像修复功能
本篇文章给大家分享的是有关C++ OpenCV如何实现图像修复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
前言
下面将使用OpenCV C++ 对有瑕疵的图像进行修复。OpenCV 提供了inpaint API可进行图像修复。
一、OpenCV inpaint
原图如图所示。本案例的需求是希望能够将图像上的红线给消除。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); }如图为掩模图像,接下来使用inpaint就可以对图像进行修复了。
二、源码
#include#include #include using namespace cv;using namespace std;/*void inpaint( InputArray src, 原图 InputArray inpaintMask, 二进制掩模,指示要修复的像素 OutputArray dst, 目标图像 double inpaintRadius, 像素周围的邻域补绘。通常,如果要修复的区域很小,则使用较小的值仅产生较少模糊 int flags INPAINT_NS 或 INPAINT_TELEA )*/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; }
三、效果显示
如图为使用inpaint修复的效果,可以看出基本上将瑕疵都给去掉了。
以上就是C++ OpenCV如何实现图像修复功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
图像
像素
二进制
C++
事件
原图
指示
效果
鼠标
如图
功能
区域
图片
就是
更多
瑕疵
目标
知识
篇文章
邻域
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么增加数据库大小
数据库安全注意事项
海南科技产业互联网有哪些
网络安全工作实施办法考核办法
服务器的电缆是在哪里
创造与魔法显示资源服务器异常
传奇数据库不能更新
网络安全国旗下
2020实况足球无法连接服务器
2019网络安全攻防大赛
维护网络安全作文题目怎么写
675w服务器电源
北京蓝果网络技术
央行高质量数据库
河北飞码软件开发公司
pmda数据库
甘肃计算机网络技术专升本考什么
小公司软件开发组织部门架构图
加强疫情期间网络安全
软件开发专案经理
网络游戏服务器规格
如何搭建一台文件共享服务器
服务器拔库
网络安全问题简要说明
论文中数据库表的设计图例
网络技术和软件开发竞赛
如何用云服务器连接电视机
2022年网络安全工作总结
中学网络安全讲话稿
无线网络安全密钥不匹配