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

这篇具有很好参考价值的文章主要介绍了【opencv】示例-inpaint.cpp 图像修复是通过填充损坏图像部分从而修复这些损坏的过程...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【opencv】示例-inpaint.cpp 图像修复是通过填充损坏图像部分从而修复这些损坏的过程...,opencv,人工智能,计算机视觉

原始图像

【opencv】示例-inpaint.cpp 图像修复是通过填充损坏图像部分从而修复这些损坏的过程...,opencv,人工智能,计算机视觉

这段代码展示了一个使用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); // 创建掩码图像,并初始化所有像素为0


    imshow("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);

【opencv】示例-inpaint.cpp 图像修复是通过填充损坏图像部分从而修复这些损坏的过程...,opencv,人工智能,计算机视觉文章来源地址https://www.toymoban.com/news/detail-857099.html

到了这里,关于【opencv】示例-inpaint.cpp 图像修复是通过填充损坏图像部分从而修复这些损坏的过程...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AOT-GAN-for-Inpainting项目解读|使用AOT-GAN进行图像修复

    项目地址: https://github.com/researchmm/AOT-GAN-for-Inpainting 基于pytorch实现 论文地址: https://arxiv.org/abs/2104.01431 开源时间: 2021年 项目简介: AOT-GAN-for-Inpainting是一个开源的图像修复项目,其对 Places2 数据集的效果表明,我们的模型在 FID 方面明显优于最先进的模型,相对改进了 1

    2024年01月22日
    浏览(25)
  • 【图像修复】AOT-GAN《Aggregated Contextual Transformations for High-Resolution Image Inpainting》

    提出用于高分辨率图像修复的aggregated contextual transformations(AOT),它允许捕获信息丰富的远程上下文和丰富的感兴趣模式,以进行上下文推理。 设计了一个新的掩模预测任务来训练用于图像修复的判别器,使判别器可以区分真实patch和合成patch,从而有助于生成器合成细粒度纹

    2023年04月08日
    浏览(38)
  • 【深度学习】Inst-Inpaint: Instructing to Remove Objects with Diffusion Models,指令式图像修复

    论文:https://arxiv.org/abs/2304.03246 code:http://instinpaint.abyildirim.com/ 图像修复任务是指从图像中擦除不需要的像素,并以语义一致且逼真的方式填充它们。传统上,希望被擦除的像素由二值化掩码定义。从应用的角度来看,用户需要为他们想要去除的对象生成这些掩码,这可能耗时

    2024年02月14日
    浏览(19)
  • 【opencv】示例-stereo_calib.cpp 基于OpenCV的立体视觉相机校准的完整示例

    这段代码是一个用于执行立体视觉系统校准的应用程序的主函数main。它按以下步骤执行: 初始化用于指定棋盘尺寸、图像列表文件名、是否展示校正结果等参数的变量。 解析命令行输入的参数,其中包括棋盘的宽度、高度、类型、格子大小、Aruco标记大小、Aruco字典名称、额

    2024年04月15日
    浏览(35)
  • opencv(三)边界填充、图像融合、图像阈值处理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 边界填充就是将图片按一定的方法将图片的四周向外填充并将图片放大 因为opencv中的颜色通道不是RGB而是BGR,所以我们要用到之前讲到的分割将颜色通道重新整合成RGB后再用matplotlib库将其画出 BORDER_R

    2024年02月21日
    浏览(43)
  • OpenCV入门系列2:图像叠加、填充和腐蚀

    在系列1中已经初步了解图像的组成并通过OpenCV函数对图片的组成进行了验证,接下来将学习图像基本的操作函数,包括图像的叠加、填充和腐蚀。 已知图像是由其像素点颜色通道的数据组成,而图像之所以不同,就是因为像素点内数据不同。因此,若要将两图像进行叠加,

    2024年02月05日
    浏览(28)
  • python opencv实现找到图像的轮廓,填充颜色

    我想找到图片中的闭合圈,然后填充颜色 所需要的cv函数: 1。 OpenCV提供的findContours()方法可以通过计算图像梯度来判断出图像的边缘,然后将边缘的点封装成数组返回。    image : 为检测的图像,必须是8位单通道二值图像。如果原图为彩色的,必须转为灰度图,并通过二值

    2024年02月04日
    浏览(32)
  • Android OpenCV(四十一):图像分割(漫水填充法),看完豁然开朗

    漫水填充算法是根据像素灰度值之间的差值寻找相同区域实现分割。我们可以将图像的灰度值理解成像素点的高度,这样一张图像可以看成崎岖不平的地面或者山区,向地面上某一个低洼的地方倾倒一定量的水,水将会掩盖低于某个高度的区域。漫水填充法利用的就是这样的

    2024年04月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包