最近找了几张图,但是都带水印,各种去水印都试了,需要开会员,我真是服了,直接百度 Java 去图片水印,找了直接自己手写几行代码,完成之后真香,废话不多说,直接上教程。
1.首先安装 opencv , 可以自己百度,我贴一下链接
blog.csdn.net/didi\\_ya/a…
2.打开IDEA,引入opencv坐标,贴入代码运行
<!-- https://mvnrepository.com/artifact/org.bytedeco/opencv -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<version>4.10.0-1.5.11</version>
</dependency>
public class Opencv {
public static final String OPENCV = "D:\\Program Files\\opencv\\opencv\\build\\java\\x64\\opencv_java4100.dll";
}
package readimage;
import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.opencv.photo.Photo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
/**
* 图片去水印
*/
@Slf4j
public class ReadImageHtml {
static {
System.load(Opencv.OPENCV);
}
public static void main(String[] args) {
//去水印的图片
String filename = "E:\\my\\swmt\\p6b4f2.jpg";
String newFileName = "E:\\my\\swmt\\p6b4f2222.jpg";
processImage(filename,newFileName);
}
private static void processImage(String fileName,String newFileName ) {
// 读取图片
Mat src = Imgcodecs.imread(fileName);
if (src.empty()) {
System.out.println("Could not open or find the image!");
return;
}
// 锐化图像
Mat dst = new Mat(src.size(), CvType.CV_8UC3);
double[][] kernelData = {
{0, -1, 0},
{-1, 5, -1},
{0, -1, 0}
};
Mat kernel = new Mat(3, 3, CvType.CV_64F);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
kernel.put(i, j, kernelData[i][j]);
}
}
Imgproc.filter2D(src, dst, -1, kernel);
// 去水印
Point topLeft = new Point(src.cols() - 200, src.rows() - 200); // 右下角水印左上角坐标
Point bottomRight = new Point(src.cols(), src.rows()); // 右下角水印右下角坐标
// 创建掩膜
Mat mask = new Mat(src.size(), CvType.CV_8UC1, new Scalar(0));
Imgproc.rectangle(mask, topLeft, bottomRight, new Scalar(255), -1);
// 使用 inpaint 方法去水印
Mat result = new Mat();
Photo.inpaint(dst, mask, result, 3, Photo.INPAINT_TELEA);
// 再次锐化图像
Mat finalResult = new Mat(result.size(), CvType.CV_8UC3);
Imgproc.filter2D(result, finalResult, -1, kernel);
// 保存处理后的图片
Imgcodecs.imwrite(newFileName, finalResult);
System.out.println("Image processed and saved.");
}
}
```