图片去水印

208 阅读1分钟

最近找了几张图,但是都带水印,各种去水印都试了,需要开会员,我真是服了,直接百度 Java 去图片水印,找了直接自己手写几行代码,完成之后真香,废话不多说,直接上教程。

1.jpeg

11.jpeg

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.");
    }



}



```