如何利用Python和OpenCV对图像进行加水印详解

目录
  • 前言
  • 🌌 第 1 步:导入 OpenCV 并读取logo和要应用水印的图像
  • 💨 第 2步:计算两个图像的高度和宽度
  • 🚀 第 3 步:将水印放置在图像的中心
  • 🍺 第 4 步:使用 OpenCV 中的 addWeighted 函数
  • 🎨 第 5 步:显示结果并保存输出
  • 总结

前言

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

水印前的图片:

logo.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()

输出:

总结

到此这篇关于如何利用Python和OpenCV对图像进行加水印的文章就介绍到这了,更多相关Python和OpenCV对图像加水印内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实现图片加文字水印OPenCV和PIL库

    目录 一:openCV给图片添加水印 二:使用PIL给图片添加水印 在python中我们可以使用openCV给图片添加水印,这里注意openCV无法添加汉字水印,添加汉字水印上可使用PIL库给图片添加水印 一:openCV给图片添加水印 1:安装openCV pip install opencv-python 2:使用openCV给图片添加水印实例: # -*- coding: utf-8 -*- import cv2 # 载入突破 img = cv2.imread('test.jpg') #

  • 如何利用python给图片添加半透明水印

    前言 本文主要给大家介绍了关于python图片添加半透明水印的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 示例代码: # coding:utf-8 from PIL import Image, ImageDraw, ImageFont def add_text_to_image(image, text): font = ImageFont.truetype('C:\Windows\Fonts\STXINGKA.TTF', 36) # 添加背景 new_img = I

  • Python实现图片批量加入水印代码实例

    这篇文章主要介绍了Python实现图片批量加入水印代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 写文章的时候可以设置是否添加水印.可是,有些图片可能想加水印,有些不想加水印,该怎么办呢? 配置环境 python3 + pillow pip3 install pillow 引入库 from PIL import Image, ImageSequence import os import random 效果预览: 使用方法: 在脚本同目录

  • 使用OpenCV为图像加水印的教程

    目录 1. 什么是水印? 2. 在 OpenCV 中调整图像大小 3.使用图像创建水印 参考 在本文中,我们将学习如何使用 OpenCV 为多个图像添加水印. 1. 什么是水印? 水印是有意叠加在不同图像上的标志.签名.文本或图案,用于保护图像的版权. 其主要目的是宣传品牌,并使未经所有者许可复制或使用原始图像变得更加困难. 组织和专业人士经常使用水印来防止在在线托管内容后被其他人使用他们的内容. 那么,你有没有想过为图像添加水印? 例如,我们写博客会说明外部图像的来源.但是你自己创建的图像呢?

  • Python批量图片去水印的方法

    ​平常工作中,有时为了采用网络的一些素材,但这些素材往往被打了水印,如果我们不懂PS就无法去掉水印,或者无法批量去掉水印.这些就很影响我们的工作效率. 今天我们就一起来,用Python + OpenCV三步去除水印,去水印需要使用的库:cv2.numpy.cv2是基于OpenCV的图像处理库,可以对图像进行腐蚀,膨胀等操作:numpy这是一个强大的处理矩阵和维度运算的库. 图片去水印原理 1.标定噪声的特征,使用cv2.inRange二值化标识噪声对图片进行二值化处理,具体代码:cv2.inRa

  • Python如何为图片添加水印

    添加水印的主要目的是为了版权保护,使自己的图像不被抄袭或者恶意转载.网上有很多制作水印的工具,本帖介绍怎么使用Python-Pillow库给图片添加水印. 使用ImageMagick添加图片水印-Linux 添加文本水印 在图片右下角添加文字: from PILimport Image, ImageDraw, ImageFont # 指定要使用的字体和大小:/Library/Fonts/是macOS字体目录:Linux的字体目录是/usr/share/fonts/ font = ImageFon

  • python 实现图片修复(可用于去水印)

    在现实的生活中,我们可能会遇到一些美好的或是珍贵的图片被噪声干扰,比如旧照片的折痕,比如镜头上的灰尘或污渍,更或者是某些我们想为我所用但有讨厌水印,那么有没有一种办法可以消除这些噪声呢? 答案是肯定的,依然是被我们用了无数次的OpenCV这款优秀的框架. 效果预览 图片修复原理 那OpenCV究竟是怎么实现的,简单的来说就是开发者标定噪声的特征,在使用噪声周围的颜色特征推理出应该修复的图片的颜色,从而实现图片修复的. 程序实现解析 标定噪声的特征,使用cv2.inRange二值化标识噪声对图片进

  • Python OpenCV对图像进行模糊处理详解流程

    其实我们平时在深度学习中所说的卷积操作,在 opencv 中也可以进行,或者说是类似操作.那么它是什么操作呢?它就是图像的模糊(滤波)处理. 均值滤波 使用 opencv 中的cv2.blur(src, ksize)函数.其参数说明是: src: 原图像 ksize: 模糊核大小 原理:它只取内核区域下所有像素的平均值并替换中心元素.3x3 标准化的盒式过滤器如下所示: 特征:核中区域贡献率相同. 作用:对于椒盐噪声的滤除效果比较好. # -*-coding:utf-8-*- ""&q

  • OpenCV实现图像背景虚化效果原理详解

    目录 0 写在前面 1 小孔成像 2 光学成像 3 虚化效果 4 代码实战 0 写在前面 相信用过相机的同学都知道虚化特效,这是一种使焦点聚集在拍摄主题上,让背景变得朦胧的效果,例如本文最后实现的背景虚化效果 相机虚化特效背后的原理是什么?和计算机视觉有什么关系?本文带你研究这些问题. 1 小孔成像 小学我们就知道,没有光就不存在图像,为了产生图像,场景必须有一个或多个.直接或间接的光源. 如图所示,光照主要分为三类: 散射 直接光照 漫反射 在获得光源后,将产生从物体到检测平面的光线. 由于从

  • 利用Python中xlwt模块操作excel的示例详解

    目录 一.安装 二.创建表格并写入 三.设置单元格样式 四.设置单元格宽度 五.设置单元格背景色 六.设置单元格内容对齐方式 七.单元格添加超链接 八.单元格添加公式 九.单元格中输入日期 十.合并行和列 十一.单元格添加边框 一.安装 pip install xlwt 二.创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 添加sheet worksheet = workb

  • 利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定.假定没有外力时,两个弹簧的长度为L1和L2. 由于两物体有重力,那么在平面上形成摩擦力,那么摩擦系数分别为b1和b2.所以可以把微分方程写成这样: 这是一个二阶的微分方程,为了使用python来求解,需要把它转换为一阶微分方程

  • 利用Python暴力破解zip文件口令的方法详解

    前言 通过Python内置的zipfile模块实现对zip文件的解压,加点料完成口令破解 zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了.ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的. 比如要读取一个Python zipfile 模块,这里假设filename是一个文件的路径: impo

  • 利用Python如何制作好玩的GIF动图详解

    前言 之前我们分享过用Python进行可视化的9种常见方式.其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplotlib制作GIF图表. 假如电脑上没有安装ImageMagick,先去这里按照自己的电脑系统下载对应版本,大家也可以通过我们下载:https://www.jb51.net/softs/140766.html,如果我们想用matplotlib的save方法渲染GIF动图,就需要安装ImageMagick. 下图是我们制作的一个动图示例:

  • 利用Python中unittest实现简单的单元测试实例详解

    前言 单元测试的重要性就不多说了,可恶的是Python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西.但是作为一个优秀的程序员,不仅要写好功能代码,写好测试代码一样

  • 利用Python和OpenCV库将URL转换为OpenCV格式的方法

    今天的博客是直接来源于我自己的个人工具函数库. 过去几个月,有些PyImageSearch读者电邮问我:"如何获取URL指向的图片并将其转换成OpenCV格式(不用将其写入磁盘再读回)".这篇文章我将展示一下怎么实现这个功能. 额外的,我们也会看到如何利用scikit-image从URL下载一幅图像.当然前行之路也会有一个常见的错误,它可能让你跌个跟头. 继续往下阅读,学习如何利用利用Python和OpenCV将URL转换为图像 方法1:OpenCV.NumPy.urllib 第一个方

  • python使用opencv resize图像不进行插值的操作

    如下所示: def resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None): 如果使用vanilla resize,不改变默认参数,就会对原图像进行插值操作.不关你是扩大还是缩小图片,都会通过插值产生新的像素值. 对于语义分割,target的处理,如果是对他进行resize操作的话.就希望不产生新的像素值,因为他的颜色信息,代表了像素的类别信息. 但是我们有时候希望resize之后不产生新的像素值,而是产生利用最近邻点

随机推荐