使用 Python 和 OpenCV 对图像进行加水印

简介: 使用 Python 和 OpenCV 对图像进行加水印

在本文中,我将带着大家使用 Python 和 OpenCV 对图像进行加水印。水印有意在图像上留下文本/标志,很多博主会使用水印来保护图像的版权。使用水印我们可以确保图像的所有者是在图像上印制水印的人。


水印前的图片:

e9bc420cb07c4824a4d29fb161cf4250.png

logo.png:


image.png

🌌 第 1 步:导入 OpenCV 并读取logo和要应用水印的图像


# 使用 OpenCV 导入 cv2 的水印图像
import cv2
# 导入我们将要使用的logo
logo = cv2.imread("logo.png")
# 导入我们要应用水印的图像
img = cv2.imread("haiyong.png")


💨 第 2步:计算两个图像的高度和宽度


计算两个图像的高度和宽度,并将它们保存到其他变量中。我们需要计算宽度和高度,因为我们要将水印放置在图像上的某个位置,为此,我们只需要知道徽标和图像的正确宽度和高度。


# 计算logo的尺寸高度和宽度
h_logo, w_logo, _ = logo.shape
# 图像的高度和宽度
h_img, w_img, _ = img.shape


在这里,我们使用了OpenCV 中的shape函数,它返回图像的高度和宽度的元组。


🚀 第 3 步:将水印放置在图像的中心


现在,我们将计算图像中心的坐标,因为我要将水印放置在图像的中心,你们也可以选择其他位置。


# 计算中心计算中心的坐标,我们将在其中放置水印
center_y = int(h_img/2)
center_x = int(w_img/2)
# 从上、下、右、左计算
top_y = center_y - int(h_logo/2)
bottom_y = top_y + h_logo
right_x = left_x + w_logo
left_x = center_x - int(w_logo/2)


🍺 第 4 步:使用 OpenCV 中的 addWeighted 函数


要为图像添加水印,我们将使用 OpenCV 中的 addWeighted 函数。首先,我们将提供要放置水印的目的地,然后将该目的地传递给带有图像和徽标的 addWeighted 函数。


语法: cv2.addWeighted(source1, alpha, source2, beta, gamma)


在我们的例子中,source1 是我们想要放置logo的图像,alpha 是logo的不透明度,source2 是logo本身,我们将相应地设置 beta为1,不透明度的 alpha 和 gamma分别为 1 和 0。


# 给图片添加水印

destination = img[top_y:bottom_y, left_x:right_x]

result = cv2.addWeighted(destination, 1, logo, 1, 0)


🎨 第 5 步:显示结果并保存输出


之后,我们只是显示结果并保存输出。为了显示我们使用imshow 函数的输出并写入/保存图像,我们在两个函数中都使用imwrite 函数,首先我们必须提供文件名作为参数,然后是文件本身。cv2.waitKey(0) 用于等待直到用户按下 Esc 键,之后 cv2.destroyAllWindows 函数将关闭窗口。


# displaying and saving image
img[top_y:bottom_y, left_x:right_x] = result
cv2.imwrite("watermarked.jpg", img)
cv2.imshow("Watermarked Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


🛹 下面是完整的实现:

# 使用 OpenCV 导入 cv2 的水印图像
import cv2
# 导入我们将要使用的logo
logo = cv2.imread("logo.png")
# 导入我们要应用水印的图像
img = cv2.imread("haiyong.png")
# 计算logo的尺寸高度和宽度
h_logo, w_logo, _ = logo.shape
# 图像的高度和宽度
h_img, w_img, _ = img.shape
# 计算中心计算中心的坐标,我们将在其中放置水印
center_y = int(h_img/2)
center_x = int(w_img/2)
# 从上、下、右、左计算
top_y = center_y - int(h_logo/2)
left_x = center_x - int(w_logo/2)
bottom_y = top_y + h_logo
right_x = left_x + w_logo
# 给图片添加水印
destination = img[top_y:bottom_y, left_x:right_x]
result = cv2.addWeighted(destination, 1, logo, 1, 0)
# 显示和保存图像
img[top_y:bottom_y, left_x:right_x] = result
cv2.imwrite("watermarked.jpg", img)
cv2.imshow("Watermarked Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
目录
相关文章
|
1月前
|
数据安全/隐私保护 Python
Python3给图片添加水印
Python3给图片添加水印
61 1
|
7天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python构建简单的图像识别应用
本文将介绍如何利用Python语言及其相关库来构建一个简单但功能强大的图像识别应用。通过结合OpenCV和深度学习模型,我们将展示如何实现图像的特征提取和分类,从而实现对图像中物体的自动识别和分类。无需复杂的算法知识,只需一些基本的Python编程技巧,你也可以轻松地创建自己的图像识别应用。
|
8天前
|
机器学习/深度学习 算法 自动驾驶
opencv python 图片叠加
【4月更文挑战第17天】
|
16天前
|
编解码 计算机视觉 Python
opencv 图像金字塔(python)
opencv 图像金字塔(python)
|
16天前
|
算法 Serverless 计算机视觉
opencv 直方图处理(python)
opencv 直方图处理(python)
|
1月前
|
数据安全/隐私保护 计算机视觉 Python
如何使用Python给图片添加水印
如何使用Python给图片添加水印
19 0
|
1月前
|
数据安全/隐私保护 Python
python怎么使用Pillow库来添加图片水印
python怎么使用Pillow库来添加图片水印
23 0
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
用Python实现基本图像识别
用Python实现基本图像识别
20 0
|
1月前
|
计算机视觉 Python
Python生成图像
Python生成图像
19 0
|
1月前
|
存储 计算机视觉
OpenCV(三十九):积分图像
OpenCV(三十九):积分图像
18 0