java+opencv 为图像添加水印

java+opencv 为图像添加水印
public class P670AddLogo {
    public static void main(String[] args) {
        // 加载动态库
        System.load(new File("src/main/resources/lib/opencv/opencv_java490.dll").getAbsolutePath());
        // 1. 引入图片
        Mat background = Imgcodecs.imread("src/main/resources/img/background.jpg");
        // 2. 制作logo
        Mat logo = new Mat(200, 200, CvType.CV_8UC3, new Scalar(0, 0, 0));
        Mat mask = new Mat(200, 200, CvType.CV_8UC1, new Scalar(0, 0, 0));
        Point topLeft = new Point(20, 20);
        Point bottomRight = new Point(120, 120);
        Imgproc.rectangle(logo, topLeft, bottomRight, new Scalar(0, 0, 255), 2);
        Imgproc.rectangle(mask, topLeft, bottomRight, new Scalar(255, 255, 255), 2);
        topLeft = new Point(80, 80);
        bottomRight = new Point(180, 180);
        Imgproc.rectangle(logo, topLeft, bottomRight, new Scalar(0, 255, 0), 2);
        Imgproc.rectangle(mask, topLeft, bottomRight, new Scalar(255, 255, 255), 2);
        Mat m = new Mat();
        Core.bitwise_not(mask, m);
        HighGui.imshow("logo", logo);
        HighGui.imshow("mask", mask);
        HighGui.imshow("m", m);

        // 3. 计算添加位置,将添加位置变黑
        Mat roi = new Mat(background, new Rect(0, 0, 200, 200));
        HighGui.imshow("roi", roi);
        Mat tmp = new Mat();
        Core.bitwise_and(roi, roi, tmp, m);
        HighGui.imshow("tmp", tmp);
        Mat dst = new Mat();
        Core.add(tmp, logo, dst);
        HighGui.imshow("dst", dst);
        // 4.利用add,将图片和logo叠加到一起

        Mat submat = background.submat(new Rect(0, 0, 200, 200));
        dst.copyTo(submat);
        HighGui.imshow("background", background);
        HighGui.waitKey(0);
        HighGui.destroyAllWindows();
        System.exit(0);
    }
}

 

posted @ 2025-05-26 05:12  锐洋智能  阅读(30)  评论(0)    收藏  举报