测试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;
}