C++ OpenCV如何实现图像修复功能
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇文章给大家分享的是有关C++ OpenCV如何实现图像修复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言下面将使用OpenC
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
软件开发的基础是什么意思
软件开发 30以上
什么是世界网络安全的规范性文件
宇信科技是互联网公司吗
网络安全系列培训名称
依托于网络技术的创业机会
北京直播软件开发平台
郑州网络技术操作
我的世界服务器怎么选硬盘
浪潮服务器风扇一直满速
MP3下载软件开发
mc服务器与房间好坏对比
ssi服务器电源接口标准
天津时代网络技术基础
互联网证券 金融科技
数据库安全性实验七
软件开发项目质量评估表
中国电信软件开发自研
数据库dateto
安徽通信软件开发价钱
服务器日志有什么用
国泰安数据库人物特征
坐席助手无法注册到服务器
平安银行总部软件开发
江门在线学习软件开发
软件开发模型适用rad模型
无盘管理服务器
如何配置数据库地址吗
绍兴电子商务软件开发
互联网科技创新的故事