图像修复(2)| 基于mask操作和图像修复的去水印、图像补全、去除瑕疵与污点

前言

上篇文章讲了去除水印的第一种方式,下面介绍去除水印的第二种方式,手动定位水印位子+修复神经网络
老规矩先上效果图,以免浪费大家时间:
在这里插入图片描述
左图是原图,随便从网上下载一张,后面是处理完的效果图。

项目位置及运行环境安装

项目地址:https://github.com/Picsart-AI-Research/MI-GAN
这个项目的优点在于对配置要求低,且支持cpu推理,框架是pytorch,对pytorch熟悉的朋友可以按照官方步骤来安装环境。
我这里没有按照官方步骤安装,因为官方步骤是gpu的安装方式,下面是cpu的安装方式。

1.下载项目

git clone https://github.com/Picsart-AI-Research/MI-GAN.git

2.win+R进入cmd,创建conda环境

conda create -n mi-gan python=3.9
conda activate mi-gan

3.注释掉requirements.txt里面的PyTorch加速库

在这里插入图片描述

4.安装pytorch和其他依赖

cd MI-GAN
pip install -r requirements.txt

5.获得模板图片

代码:

#include <opencv2/opencv.hpp>

cv::Mat image;  // 原始图像
cv::Mat mask;   // 掩码
bool drawing = false;  // 标志,表示是否正在绘制
cv::Point pt1, pt2;  // 矩形的两个端点

// 鼠标回调函数
void mouseCallback(int event, int x, int y, int flags, void* userdata) 
{
    // 鼠标左键按下时,开始绘制
    if (event == cv::EVENT_LBUTTONDOWN) 
    {
        drawing = true;
        pt1 = cv::Point(x, y);  // 记录鼠标按下的位置
    }
    // 鼠标左键释放时,结束绘制
    else if (event == cv::EVENT_LBUTTONUP) 
    {
        drawing = false;
        pt2 = cv::Point(x, y);  // 记录鼠标松开的位置
        // 在掩码上画矩形
        cv::rectangle(mask, pt1, pt2, cv::Scalar(255), -1);  // 画一个填充的矩形(白色区域)
    }
    // 鼠标移动时,如果正在绘制,则继续更新矩形的大小
    else if (event == cv::EVENT_MOUSEMOVE) 
    {
        if (drawing) 
        {
            pt2 = cv::Point(x, y);
            // 每次鼠标移动时,刷新显示
            cv::Mat temp_image = image.clone();
            cv::rectangle(temp_image, pt1, pt2, cv::Scalar(0, 255, 0), 2);  // 绘制实时矩形框
            cv::imshow("Image with Mask", temp_image);  // 显示图像
        }
    }
}

int main() 
{
    // 1. 读取图像
    image = cv::imread("F:/Desktop/6915.jpg_wh860.jpg");

    if (image.empty()) 
    {
        std::cerr << "Error loading image!" << std::endl;
        return -1;
    }

    // 2. 创建一个掩码,初始化为黑色(全 0)
    mask = cv::Mat::zeros(image.size(), CV_8UC1);

    // 3. 设置鼠标回调函数
    cv::namedWindow("Image with Mask", cv::WINDOW_NORMAL);
    cv::setMouseCallback("Image with Mask", mouseCallback, nullptr);

    // 4. 显示图像,并通过鼠标绘制
    while (true) 
    {
        // 仅显示原始图像并在掩码上绘制
        cv::Mat temp_image = image.clone();
        cv::Mat temp_mask = mask.clone();

        // 将掩码区域显示在图像上
        temp_image.setTo(cv::Scalar(0, 255, 0), temp_mask);  // 使用掩码(绿色高亮显示)

        cv::imshow("Image with Mask", temp_image);  // 显示图像

        char c = (char)cv::waitKey(1);  // 等待按键
        if (c == 27) 
        {  // 按下ESC退出
            break;
        }
    }

    // 最终显示掩码
    cv::imshow("Final Mask", mask);
    cv::imwrite("F:/Desktop/6915.jpg_wh860.png", mask);
    cv::waitKey(0);

    return 0;
}

这里通过opencv将有水印的(想消除的)地方圈起来,得到模板图片,并放入MI-GAN目录底下如图所示:

在这里插入图片描述
这里注意,名称要与要处理的名称一致。

6.运行代码

cd scripts

python demo.py --model-name comodgan-512 --model-path ../model/comodgan_512_places2.pt \
--images-dir ../examples/places2_512_object/images \
--masks-dir ../examples/places2_512_object/masks \
--output-dir ../examples/places2_512_object/results/migan/ --device cpu --invert-mask

输出图片去examples/places2_512_object/results/migan/目录底下去找。

总结

随着对修复神经网络认识的逐渐加深,我意识到图像修复神经网络不止有去除水印一种功能,还有许多其他功能,去除瑕疵,移除场景物品、人物等,后续可能会出一些其他用法的文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值