图像修复

测试opencv 图像修复函数inpaint

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

int main()
{
    //// 加载图像
    // cv::Mat image = cv::imread("D:/material0000.png", cv::IMREAD_UNCHANGED); // 替换为你的图像路径
    // if (image.empty())
    //{//std::cerr << "无法加载图像!" << std::endl;
    //     return -1;
    // }

    //// 创建一个掩码(假定白色为需要填充的空白区域)
    // cv::Mat mask;
    // cv::inRange(image, cv::Scalar(0, 0, 0, 0), cv::Scalar(255, 255, 255, 0), mask); // 检测白色区域

    //// 创建一个新的图像来存储高斯模糊结果
    // cv::Mat blurred;
    //// 应用高斯模糊
    // cv::GaussianBlur(image, blurred, cv::Size(999,999), 0); // 高斯模糊参数可调

    //// 将模糊区域与原图结合
    // cv::Mat output;
    // image.copyTo(output);         // 初始化输出图像为原图
    // blurred.copyTo(output, mask); // 将模糊覆盖到掩码区域

    ///////////////////////////////////////////////////////////////////////////////
    // 加载图像
    cv::Mat image = cv::imread("D:/material0000.png"); // 请替换为你的图像路径 IMREAD_UNCHANGED
    if (image.empty())
    {
        return -1;
    }

    // 创建一个掩码,假设白色区域是需要填充的区域
    cv::Mat mask;
    // 这里假设是填充附近的白色区域,定义你需要的颜色范围
    cv::inRange(image, cv::Scalar(0, 0, 0), cv::Scalar(10, 10, 10), mask); // 检测区域

    // 使用修补算法填充空白区域
    cv::Mat output;
    cv::inpaint(image, mask, output, 3, cv::INPAINT_TELEA); // 使用 Telea 算法

    std::vector<int> compression_params;
    compression_params.push_back(cv::IMWRITE_PNG_COMPRESSION);
    compression_params.push_back(9);
    cv::imwrite("D:/output.png", output);
    // cv::imwrite("D:/output.jpg", output);

    // 显示结果
    // cv::imshow("Original", image);
    // cv::imshow("Blurred Area", blurred);
    // cv::imshow("Output", output);
    // cv::waitKey(0);
    return 0;
}

 

posted @ 2024-10-24 16:42  玥茹苟  阅读(4)  评论(0编辑  收藏  举报