C++ OpenCV如何实现图像修复功能
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关C++ OpenCV如何实现图像修复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言下面将使用OpenC
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
互联网最新的科技有限公司
与互联网科技公司
互联网 科技创新
唐信互联网科技
广州凡科互联网科技
互联网科技股有哪些
互联网金融监管科技
互联网巨头投资的硬核科技
互联网科技公司的市场部门
济南华为互联网科技产业总部基地
世界互联网科技公司市值排名
赶超互联网科技 微信多开
宜昌元轩互联网科技有限公司
米聚互联网科技南京有限公司排面
工业互联网展湾科技股份有限公司
中国互联网有什么科技
杭州披云加互联网科技有限公司
广州三三互联网科技有限公司
互联网对科技影响
互联网金融金融科技
重生之互联网科技帝国
科技创新与互联网经济
致骋互联网科技
奇酷互联网科技公司
苏州互联网科技贷款公司
互联网科技上市公司
郑州华宇互联网科技
美国互联网科技公司
富国互联网金融科技混合基金
河南商务圈互联网科技有限公司