一、原图
二、代码
#include <iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; /** * @brief 程序的入口函数 * * 此函数是程序执行的起点,打印一条问候语到标准输出,并返回一个退出状态码。 * * @return int 返回 0 表示程序正常结束。 */ int main() { Mat src = imread("D:\\Project\\OpenCV\\DADMP.png"); if (src.empty()) { cout << "No Image!" << endl; system("pause"); return -1; } Mat gray; cvtColor(src, gray, COLOR_BGR2GRAY); //图像二值化,筛选出白色区域部分 Mat thresh; threshold(gray, thresh, 127, 255, THRESH_BINARY); //提取图片下方的水印,制作掩模图像 Mat mask = Mat::zeros(src.size(), CV_8U); int height = src.rows; int width = src.cols; int start = 0.9*height; //遍历图像像素,提取出水印部分像素,制作掩模图像 for (int i = start; i < height; i++) { uchar*data = thresh.ptr<uchar>(i); for (int j = 0; j < width; j++) { if (data[j] == 255) { mask.at<uchar>(i, j) = 255; } } } //将掩模进行膨胀,使其能够覆盖图像更大区域 Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5)); dilate(mask, mask, kernel); //使用inpaint进行图像修复 Mat result; inpaint(src, mask, result, 1, INPAINT_NS); //imshow("mask", mask); imshow("test", result); imwrite("D:\\Project\\OpenCV\\DADMP1.png", result); waitKey(0); return 0; }
复制
三、效果
去除了豆包AI