本文采用的添加水印方法原理超级简单,首先说原理:
是先用ps弄一张背景全黑,只有要加的水印字是白色的图。
原理
matlab如果直接使用imread函数读取图像的话,在matlab中存储的是uint8类型的矩阵
无论是tif格式、jpg格式还是png格式,直接读取进来就会是uint8格式。
重点是在这种矩阵中,0是纯黑色,255是纯白色
所以最简单的加水印的办法就是用ps搞一张背景为全黑色的水印图,然后直接使用矩阵加法进行叠加即可,若想加上不透明度,那就使水印矩阵点乘一个alpha变量即可。
矩阵相加的重点就是得先对水印图进行调整,使矩阵维度与原图相同。
function watermarkedImage = addWatermark(mainImage, watermarkImage,alpha)
% 调整水印图片大小以适应主图片
[rows, cols] = size(mainImage);
watermarkImage = imresize(watermarkImage, [rows cols]);
% 将水印图片叠加到主图片上
watermarkedImage=mainImage+watermarkImage.*alpha;
end
以上是基于原理给出的代码,自变量是原图,水印图,不透明度alpha(0,1)
步骤
首先在ps中新建一个背景为黑色的图层
然后将水印放在你想叠加的部分,接着将其导出为png/jpg/tif格式
然后在matlab中使用此函数即可:
以下为总代码,对于rgb图片来说,要先把它转化成灰度图才能进行加水印操作,因为这两个矩阵必须维度相同,rgb图片是三维的uint8矩阵,而gray图是二维的uint8矩阵。
clear;clc;
I1 = imread('2_1.jpg');
I1=rgb2gray(I1);
watermarkImage= imread('test.jpg');
newI1=addWatermark(I1,watermarkImage,0.7);
subplot(1,2,1);
imshow(I1);
subplot(1,2,2);
imshow(newI1);
function watermarkedImage = addWatermark(mainImage, watermarkImage,alpha)
% 调整水印图片大小以适应主图片
[rows, cols] = size(mainImage);
watermarkImage = imresize(watermarkImage, [rows cols]);
% 将水印图片叠加到主图片上
watermarkedImage=mainImage+watermarkImage.*alpha;
end
填加水印效果