一、原图
二、代码
#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