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);
}
}
浙公网安备 33010602011771号