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

 更新时间:2021年10月21日 09:20:45   作者:海拥  
Python使用opencv是因为觉得它足够强大,很多图像处理这块都是用的它,最近就用opencv添加个水印,这篇文章主要给大家介绍了关于如何利用Python和OpenCV对图像进行加水印的相关资料,需要的朋友可以参考下

前言

在本文中,我将带着大家使用 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对图像加水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现exe小工具的详细代码

    Python实现exe小工具的详细代码

    Python exe工具是一种将Python代码打包成可执行文件的工具,它可以将Python程序转换为独立的可执行文件,使得在没有安装Python解释器的环境中也能够运行Python程序,本文给大家介绍了Python实现exe小工具的详细代码,需要的朋友可以参考下
    2024-04-04
  • python使用urlparse分析网址中域名的方法

    python使用urlparse分析网址中域名的方法

    这篇文章主要介绍了python使用urlparse分析网址中域名的方法,涉及Python使用urlparse模块操作URL的技巧,需要的朋友可以参考下
    2015-04-04
  • python字符串的常用操作方法小结

    python字符串的常用操作方法小结

    这篇文章主要为大家详细介绍了python字符串的常用操作方法,如字符串的替换、删除、截取、复制、连接、比较、查找、分割等,需要的朋友可以参考下
    2016-05-05
  • python获取外网IP并发邮件的实现方法

    python获取外网IP并发邮件的实现方法

    下面小编就为大家带来一篇python获取外网IP并发邮件的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 如何用python将单引号替换为双引号

    如何用python将单引号替换为双引号

    这篇文章主要介绍了如何用python将单引号替换为双引号,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • pycharm解决关闭flask后依旧可以访问服务的问题

    pycharm解决关闭flask后依旧可以访问服务的问题

    这篇文章主要介绍了pycharm解决关闭flask后依旧可以访问服务的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Pytest初学者快速上手高效Python测试指南

    Pytest初学者快速上手高效Python测试指南

    这篇文章主要为大家介绍了Pytest初学者快速上手的高效Python测试指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python利用前序和中序遍历结果重建二叉树的方法

    Python利用前序和中序遍历结果重建二叉树的方法

    这篇文章主要介绍了Python利用前序和中序遍历结果重建二叉树的方法,实例分析了Python二叉树的定义与遍历操作技巧,需要的朋友可以参考下
    2016-04-04
  • Python django框架输入汉字,数字,字符生成二维码实现详解

    Python django框架输入汉字,数字,字符生成二维码实现详解

    这篇文章主要介绍了Python django框架输入汉字,数字,字符转成二维码实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • django中瀑布流写法实例代码

    django中瀑布流写法实例代码

    在本篇文章里小编给大家整理的是关于django中瀑布流写法实例代码以及相关知识点,有需要的朋友们学习参考下。
    2019-10-10

最新评论