图像修复
测试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; }