返回顶部
首页 > 资讯 > 后端开发 > Python >使用OpenCV为图像加水印的教程
  • 802
分享到

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

2024-04-02 19:04:59 802人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 什么是水印?2. 在 OpenCV 中调整图像大小3.使用图像创建水印参考 在本文中,我们将学习如何使用 OpenCV 为多个图像添加水印。 1. 什么是水印? 水印是有意

在本文中,我们将学习如何使用 OpenCV 为多个图像添加水印。

1. 什么是水印?

水印是有意叠加在不同图像上的标志、签名、文本或图案,用于保护图像的版权。

其主要目的是宣传品牌,并使未经所有者许可复制或使用原始图像变得更加困难。

组织和专业人士经常使用水印来防止在在线托管内容后被其他人使用他们的内容。

那么,你有没有想过为图像添加水印?

例如,我们写博客会说明外部图像的来源。但是你自己创建的图像呢?在自己创建的图像上留下你的记号不是很好吗?

好极了!让我们开始这项激动人心的任务。

2. 在 OpenCV 中调整图像大小

调整大小只不过是缩放图像,这意味着更改原始图像的大小。我们可以根据业务需求增加或减少图像的大小。

可以通过多种方式调整大小。

1.保持纵横比。图像的纵横比是其宽度与高度的比率。

.缩小或放大图像的大小

1.不保留纵横比

.仅缩小/放大宽度,仅缩小/放大高度

1.将宽度和高度都更改为特定值

到目前为止听起来不错,但我们如何实际操作呢?答案是 OpenCV 及其 resize() 函数。从本文档中阅读有关 OpenCV 调整大小功能的更多信息:https://docs.opencv.org/3.4/da/d54/group__imgproc__transfORM.html#ga47a974309e9102f5f08231edc7e7529d

**cv2.resize() 函数的语法:**cv2.resize(src, dsize,interpolation)

src – 源图像

dsize – 输出图像的所需大小

interpolation -  插值,维基百科定义:它是一种基于一组离散的已知数据点的范围构建(查找)新数据点的方法。

请参阅此文档以了解有关插值标志的更多信息:Https://docs.opencv.org/3.4/da/d54/group__imgproc__transform.html#ga5bb5a1fea74ea38e1a5445ca803ff121

现在,让我们拍摄一个示例图像并调整其大小。下面是我们的示例图像。

现在,尝试使用 OpenCV 显示它。


import cv2
img = cv2.imread('images/deer.JPG')
cv2.imshow("Original Image", img)
cv2.waiTKEy(0)
cv2.destroyAllwindows()

下面是我们的图像在使用 OpenCV 显示时的外观。

由于我们的图像是高分辨率的,因此只有一部分是可见的。

所以,肯定有必要调整它的大小。我们需要减小它的大小。

在 OpenCV 中调整图像大小的步骤:

  • 使用 cv2.imread() 读取图像
  • 设置新的宽度和高度。
  • 为新维度创建一个元组
  • 使用 cv2.resize() 调整图像大小
  • 如果需要,使用 cv2.imwrite() 将调整后的图像保存到计算机
  • 使用 cv2.imshow() 显示原始的、调整大小的图像

1. 保持纵横比——将图像缩小到原始尺寸的 20%。

我们将原始图像的大小减小到其原始大小的 20%。因此,通过计算原始宽度的 20%,原始高度的 20%,为新尺寸创建一个元组。


import cv2
img = cv2.imread('images/deer.JPG')
percent_of_scaling = 20
new_width = int(img.shape[1] * percent_of_scaling/100)
new_height = int(img.shape[0] * percent_of_scaling/100)
new_dim = (new_width, new_height)
resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)
filename = 'resized_img_aspect ratio.jpg'
cv2.imwrite(filename, resized_img)
cv2.imshow("Original Image", img)
cv2.imshow("Resized Image", resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上面的代码保存调整大小的图像并显示原始的、调整大小的图像。

做得好。通过牢记纵横比,我们成功地调整了图像大小。

2. 不保留纵横比 – 仅缩小/放大宽度,仅缩小/放大高度

调整大小的步骤与上述相同。唯一的区别是我们保持两个维度中的任何一个不变。


import cv2
img = cv2.imread('images/deer.JPG')
new_dim = (img.shape[1], 500) # changes height
resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)
cv2.imshow("Original Image", img)
cv2.imshow("Resized Image", resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

下面是从上面的代码显示的图像。

调整大小的图像失真并且不是所需的输出。

3.将宽度和高度都更改为特定值


import cv2
img = cv2.imread(‘images/deer.JPG')
new_dim = (450, 450)
resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)
cv2.imshow(“Original Image”, img)
cv2.imshow(“Resized Image”, resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

下面是从上面的代码显示的图像。

这看起来还可以,但不如保留纵横比的输出图像。所以我更喜欢通过保留纵横比来调整大小。

下一步是查看如何创建水印。

3.使用图像创建水印

我选择使用我名字的图像添加水印。制作一张你的名字的图像,然后和我一起尝试。

在图像中心添加水印的步骤

如果需要,读取并调整图像(水印图像、输入图像)的大小。


import cv2
img = cv2.imread('images/deer.JPG')
watermark = cv2.imread("watermark.PNG")
 
percent_of_scaling = 20
new_width = int(img.shape[1] * percent_of_scaling/100)
new_height = int(img.shape[0] * percent_of_scaling/100)
new_dim = (new_width, new_height)
resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)
 
wm_scale = 40
wm_width = int(watermark.shape[1] * wm_scale/100)
wm_height = int(watermark.shape[0] * wm_scale/100)
wm_dim = (wm_width, wm_height)
resized_wm = cv2.resize(watermark, wm_dim, interpolation=cv2.INTER_AREA)

根据调整大小的输入图像的新尺寸定义水印的位置。


h_img, w_img, _ = resized_img.shape
center_y = int(h_img/2)
center_x = int(w_img/2)
h_wm, w_wm, _ = resized_wm.shape
top_y = center_y - int(h_wm/2)
left_x = center_x - int(w_wm/2)
bottom_y = top_y + h_wm
right_x = left_x + w_wm

获取感兴趣的**矩形区域 (ROI)**并将其存储到名为“roi”的变量中。


roi = resized_img[top_y:bottom_y, left_x:right_x]

使用**cv2.addWeighted()**将调整大小的水印叠加到 ROI 上,并将其存储到名为“result”的变量中。


result = cv2.addWeighted(roi, 1, resized_wm, 0.3, 0)

现在,将此结果添加到调整大小的输入图像


resized_img[top_y:bottom_y, left_x:right_x] = result

将生成的水印图像保存到计算机


filename = 'watermarked_deer.jpg'
cv2.imwrite(filename, resized_img)

显示生成的水印图像


cv2.imshow("Resized Input Image", resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

下面是生成的水印图像。

到现在为止,我们已经学会了给单个图像加水印。由于我们的目标是为多个图像加水印,因此我们需要创建所有这些输入图像的列表并循环遍历它。

下面是将使用的图像。

创建输入图像列表


import os
folderPath = "images"
imgList = os.listdir(folderPath)
imgList

给多个图像加水印的代码


import cv2
watermark = cv2.imread("watermark.PNG")
wm_scale = 40
wm_width = int(watermark.shape[1] * wm_scale/100)
wm_height = int(watermark.shape[0] * wm_scale/100)
wm_dim = (wm_width, wm_height)
resized_wm = cv2.resize(watermark, wm_dim, interpolation=cv2.INTER_AREA)
h_wm, w_wm, _ = resized_wm.shape
 
for image in  imgList:
    img = cv2.imread(f'{folderPath}/{image}')
    percent_of_scaling = 20
    new_width = int(img.shape[1] * percent_of_scaling/100)
    new_height = int(img.shape[0] * percent_of_scaling/100)
    new_dim = (new_width, new_height)
    resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)
    h_img, w_img, _ = resized_img.shape
    center_y = int(h_img/2)
    center_x = int(w_img/2)
    top_y = center_y - int(h_wm/2)
    left_x = center_x - int(w_wm/2)
    bottom_y = top_y + h_wm
    right_x = left_x + w_wm
    roi = resized_img[top_y:bottom_y, left_x:right_x]
    result = cv2.addWeighted(roi, 1, resized_wm, 0.3, 0)
    resized_img[top_y:bottom_y, left_x:right_x] = result
    filename = os.path.basename(image)
    cv2.imwrite("watermarked images/watermarked_"+filename, resized_img)
    cv2.imshow("Watermarked Image", resized_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

最后,我们完成了为所有输入图像加水印的任务。

参考

OpenCV 文档:https://docs.opencv.org/3.4/d4/da8/group__imGCodecs.html#ga288b8b3Da0892bd651fce07b3bbd3a56

GitHub 存储库链接:https://github.com/harika-bonthu/Watermark-OpenCV

到此这篇关于使用OpenCV为图像加水印的教程的文章就介绍到这了,更多相关OpenCV图像加水印内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 使用OpenCV为图像加水印的教程

本文链接: https://lsjlt.com/news/134242.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用OpenCV为图像加水印的教程
    目录1. 什么是水印?2. 在 OpenCV 中调整图像大小3.使用图像创建水印参考 在本文中,我们将学习如何使用 OpenCV 为多个图像添加水印。 1. 什么是水印? 水印是有意...
    99+
    2024-04-02
  • 如何利用Python和OpenCV对图像进行加水印详解
    目录前言🌌 第 1 步:导入 OpenCV 并读取logo和要应用水印的图像💨 第 2步:计算两个图像的高度和宽度🚀 第 3 步:将水...
    99+
    2024-04-02
  • 使用TP5.1 怎么为图片添加水印
    这篇文章将为大家详细讲解有关使用TP5.1 怎么为图片添加水印,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在 Linux 和 Mac OS X 中可以运行如下命令:curl -s...
    99+
    2023-06-14
  • Python编程OpenCV和Numpy图像处理库实现图片去水印
    目录OpenCV + Numpy函数简介色彩转换PIL + itertools大家好,我是小五 前一阵给大家分享了,Python如何给图片加水印。评论区就有小伙伴问,可不可使用Pyt...
    99+
    2024-04-02
  • Android使用Opengl录像时添加水印
    最近需要开发一个类似行车记录仪的app,其中需要给录制的视频添加动态水印。我使用的是OpenGL开发的,刚开始实现的是静态水印,后面才实现的动态水印。 先上效果图,左下角的是静...
    99+
    2022-06-07
    opengl Android
  • 使用Node.js给图片加水印的方法
    一、准备工作: 首先,确保你本地已经安装好了node环境。 然后,我们进行图像编辑操作需要用到一个Node.js的库:images。 这个库的地址是:https://github.com/zhangyuan...
    99+
    2022-06-04
    水印 方法 图片
  • 如何使用python给图片加水印
    这篇文章主要介绍如何使用python给图片加水印,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!方式一:叠加文字水印最简单的一种方式是,在图片上绘制半透明文本来实现水印效果。主要用到Figure.text函数参数类型说...
    99+
    2023-06-15
  • 拒绝盗图!教你怎么用python给图片加水印
    方式一:叠加文字水印 最简单的一种方式是,在图片上绘制半透明文本来实现水印效果。 主要用到Figure.text函数 参数 ...
    99+
    2024-04-02
  • 使用java怎么为表格添加水印
    本篇文章给大家分享的是有关使用java怎么为表格添加水印,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Andr...
    99+
    2023-06-14
  • Python实现为图片添加水印的示例详解
    目录1、引言2、filestools介绍2.1 安装2.2 filestools 功能介绍2.3 watermarker模块介绍2.4 代码实例补充1、引言 小屌丝:鱼哥,这个周末过...
    99+
    2024-04-02
  • 聊聊如何使用ueditor上传图片加水印
    如何用ueditor上传图片加水印?下面本篇文章给大家介绍一下使用ueditor上传图片加水印的方法,希望对大家有所帮助!博客在上传图片的时候,我希望能打上我博客链接的水印,掘金,csdn都是这么干的,这事我得学习。平时的图片上传还好说,在...
    99+
    2024-04-02
  • python怎么使用opencv对图像添加噪声
    本篇内容主要讲解“python怎么使用opencv对图像添加噪声”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python怎么使用opencv对图像添加噪声”吧!原图:1、高斯噪声高斯噪声就是给...
    99+
    2023-06-29
  • 使用Python中PIL库给图片添加文本水印
    目录前言一、PIL是什么?二、安装PIL三、查看PIL版本四、使用PIL库给图片添加文本水印1.引入库2.打开图片文件3.新建一个Draw对象4.设置水印文字、字体、大小5.设置水印...
    99+
    2023-05-16
    python给图片添加水印文字 python pil库 python 添加水印
  • Java使用pdfbox实现给pdf文件加图片水印
    目录引入依赖代码效果引入依赖 <dependency> <groupId>org.apache.pdfbox</groupId&...
    99+
    2022-11-16
    Java pdfbox PDF添加图片水印 Java PDF添加图片水印 Java PDF水印
  • Python-OpenCV教程之图像的位运算详解
    1、按位取反bitwise_not() 按位取反就是将数值根据每个bit位1变0,0变1,比如0xf0按位取反就变成了0x0f,如果是uint8类型的数据,取反前...
    99+
    2024-04-02
  • OpenCV-Python使用分水岭算法实现图像的分割与提取
    目录图像分割分水岭算法waterShed函数形态学分割distanceTransform函数确定未知区域ConnectedComponents函数实战分水岭算法随着当今世界的发展,计...
    99+
    2024-04-02
  • OpenCV图像修复cv2.inpaint()的使用
    目录1. 效果图2. 原理3. 源码这篇博客将介绍如何通过OpenCV中图像修复的技术——cv2.inpaint() 去除旧照片中的小噪音、笔划等。并提供一个可交互式的程序,利用Op...
    99+
    2024-04-02
  • Java用自带的Image IO给图片添加水印
    目录1.  文字水印2.  旋转文字3.  旋转坐标轴另外的写法1.  文字水印 import sun.font.FontDesignMe...
    99+
    2024-04-02
  • 如何使用canvas实现给图片添加平铺水印
    小编给大家分享一下如何使用canvas实现给图片添加平铺水印,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近项目中遇到一个需求,需要把一张图片加上平铺的水印类似...
    99+
    2023-06-09
  • phpcms远程图片本地化不成功及加水印功能失效的解决教程
    所以使用了 curl 函数来替换,经过测试对于防盗链的图片远程抓取依然有效,另外添加了远程保存图片的加水印功能. 2010年10月10日19:30:18最新申明:php必须开启支持curl函数,具体开启方法参照我们的另一...
    99+
    2022-06-12
    远程图片 本地化 水印
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作