1.功能概述
实现图片去水印的方法有很多,下面提供一种基于OpenCV库的C++实现方法。主要思路是利用图像中不同水印区域之间的差异,进行区域提取、重构和合成,从而实现去除水印的效果。
2.具体实现
2.1.导入OpenCV库和头文件
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;
2.2.读入图像并显示
//读入图像
Mat image = imread("test.jpg", IMREAD_UNCHANGED);
if (image.empty()) {cout << "读取图像失败!" << endl;return -1;
}
//显示图像
imshow("原始图像", image);
waitKey(0);
2.3.提取水印区域
//转换为灰度图像
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
//二值化处理
Mat binary;
threshold(gray, binary, 50, 255, THRESH_BINARY);
//形态学操作,提取水印区域
Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
morphology