当前位置: 首页 > news >正文

OpenCV计算摄影学(1)图像修复(Inpainting)的函数inpaint()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

使用图像中选定区域的邻域来恢复该选定区域。
cv::inpaint 函数是 OpenCV 中用于图像修复(Inpainting)的一个重要函数。它可以根据指定的方法和参数来修复图像中被遮罩区域的内容,通常用于去除图像中的划痕、污点或其他不需要的标记。

函数原型

void cv::inpaint	
(
	InputArray 	src,
	InputArray 	inpaintMask,
	OutputArray 	dst,
	double 	inpaintRadius,
	int 	flags 
)		

参数

  • 参数src 输入8位、16位无符号或32位浮点单通道图像,或者是8位三通道图像。
  • 参数inpaintMask 修复掩码,8位单通道图像。非零像素表示需要进行修复的区域。
  • 参数dst 输出图像,与src具有相同的大小和类型。
  • 参数inpaintRadius 算法考虑的每个修复点的圆形邻域半径。
  • 参数flags 可以是 cv::INPAINT_NS 或 cv::INPAINT_TELEA 的修复方法。

该函数通过边界附近的像素重建选定的图像区域。此功能可用于从扫描的照片中去除灰尘和划痕,或者从静态图像或视频中移除不需要的对象。更多详情请参见 http://en.wikipedia.org/wiki/Inpainting。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 加载 OpenCV 自带的示例图像
    Mat src = imread( String( "/media/dingxin/data/study/OpenCV/sources/images/lenna.png" ), IMREAD_COLOR );  // 确保 "lena.jpg" 存在于 OpenCV 的示例目录下

    if ( src.empty() )
    {
        cout << "Could not open or find the image!" << endl;
        return -1;
    }

    // 创建一个掩码图像,并在其上绘制需要修复的区域
    Mat inpaintMask = Mat::zeros( src.size(), CV_8UC1 );
    rectangle( inpaintMask, Point( 231, 83 ), Point( 331, 172 ), Scalar( 255, 255, 255 ), FILLED );  // 示例矩形

    Mat dst;

    // 使用 INPAINT_TELEA 方法进行图像修复
    inpaint( src, inpaintMask, dst, 3, INPAINT_TELEA );

    // 显示原图、掩码和修复后的图像
    imshow( "Original Image", src );
    imshow( "Inpaint Mask", inpaintMask );
    imshow( "Inpainted Image", dst );

    waitKey( 0 );
    return 0;
}

运行结果

在这里插入图片描述
处理的不大理想,有待于进一步研究使用方法。

http://www.dtcms.com/a/35354.html

相关文章:

  • 【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台
  • P5304 [GXOI/GZOI2019] 旅行者
  • 嵌入式项目:STM32刷卡指纹智能门禁系统
  • ShardingSphere--02--数据分片
  • 基于嵌入式linux的数据库:SQLite
  • 分片机制如何理解?
  • Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果
  • 统计学中的得分函数(Score Function)是什么?它和Fisher信息矩阵有什么关系?
  • Golang笔记——Interface类型
  • JavaScript获取DOM元素语法总结(getElementsByName()、querySelector()、querySelectorAll())
  • 网络安全漏洞管理要求 网络安全产品漏洞
  • OC高级编程之GCD
  • C语言数据结构—二叉树的链式结构实现
  • 【ECMAScript6】
  • 【知识】PyTorch中不同优化器的特点和使用
  • Visual Whole-Body for Loco-Manipulation论文复现
  • hab 通信
  • 爬虫基础入门之爬取豆瓣电影Top250-Re正则的使用
  • 另外一个用于测试内存屏障差异的 C 语言示例程序(自己测试)
  • springboot集成jackson-dataformat-xml实现发送XML请求和XML响应参数处理
  • docker离线安装记录
  • 人工智能基础知识笔记一:核函数
  • 使用 BFS 解决 最短路问题
  • springboot005学生心理咨询评估系统(源码+数据库+文档)
  • Xinference和ollama有什么区别
  • 【CSS】HTML元素布局基础总结
  • 沁恒CH32V307RCT6烧写hex文件时报错“设置芯片型号失败”
  • IP---网络类型
  • 基于 MySQL 递归 CTE 实现表,父级id与子级id拼接
  • 零信任应用侧理性选择并期许未来