当前位置: 首页 > news >正文

机器视觉学习-day10-图像添加水印

代码运行步骤:

运行的结果是在源图像上添加一个模板输入图像的前景

1 模板输入

此组件的功能是输入一个水印图片,需要进行灰度化与二值化,还需要制作掩膜。

模板图建议使用包含透明图层的png格式,png格式支持Alpha通道(透明度),jpg不支持此通道,但是OpenCV默认读取图片是BGR三通道,因此会减少png的Alpha通道,结果就是黑色。建议使用带透明的png图片作为水印。

2 与运算

有了二值化之后的模板输入图,就可以在原始图像中根据模板大小切割出一个ROI区域,即要添加水印的区域,让二值化之后的模板与原图切割出的ROI区域进行与运算。

3 图像融合

该组件的目的是将图像对应的位置像素进行叠加,需要注意的是两个像素数组的大小应该是相同的,另外还需要通道数相同。

原始图片:2.jpg

模板图像:1.png

import cv2if __name__ == '__main__':# 1. 图片输入path = '2.jpg'  # 读取名为"1.png"的主图像,存储到变量image_np中。image_np = cv2.imread(path)  # cv2.imread()函数读取图像文件,返回一个NumPy数组表示图像。# 2. 模板输入logo = cv2.imread('1.png')  # 读取名为"dog.png"的logo图像,存储到变量logo中。# 3.灰度化gray_logo = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)"""将彩色logo图像转换为灰度图像。cv2.cvtColor()函数用于颜色空间转换,这里将BGR格式转换为灰度格式。"""# 4.二值化ret, mask_logo = cv2.threshold(gray_logo,1,255,cv2.THRESH_BINARY_INV  # 反阈值)"""对灰度logo图像进行二值化处理,生成掩膜(mask)。cv2.threshold()函数应用阈值处理:第一个参数gray_logo是输入图像第二个参数1是阈值,这里设为1第三个参数255是最大值第四个参数cv2.THRESH_BINARY_INV表示使用反向二值化反向二值化(# 反阈值)意味着:像素值大于1的变为0(黑色),小于等于1的变为255(白色)"""# 5. 与运算rows, cols = logo.shape[:2]  # 获取logo图像的尺寸(高度和宽度)# logo.shape返回一个元组(高度, 宽度, 通道数),[:2]只取前两个值print(rows, cols)# 从原图中做ROI切割roi = image_np[:rows, :cols]# 从主图像中提取与logo相同大小的区域(ROI - Region of Interest)# image_np[:rows, :cols]使用数组切片获取左上角区域cv2.imshow('roi', roi)  # 显示ROI区域cv2.imwrite('roi.jpg', roi)  # 切割的图像# 位于操作需要传两个原图,之前的实验遇见过# mask_logo在位于操作中充当掩膜的角色image_np_bg = cv2.bitwise_and(roi,roi,mask=mask_logo)cv2.imshow('image_np_bg', image_np_bg)cv2.imwrite('image_np_bg.jpg', image_np_bg)  # 掩膜"""cv2.bitwise_and()执行按位与操作:前两个参数是相同的输入图像(roi)mask=mask_logo指定掩膜,只有在掩膜非零的区域才会进行与操作这步操作的目的是在ROI中保留logo背景区域(掩膜中白色部分)"""# 6. 图像融合dst = cv2.add(image_np_bg, logo)  # dst是小图融合后的结果,需要把像素值替换到原大图中"""将处理后的ROI背景与logo图像相加融合cv2.add()执行图像加法,将两个图像的像素值相加由于image_np_bg中logo区域是黑色(值为0),加上logo后,logo区域就显示出来了"""image_np[:rows, :cols] = dst# 将融合后的结果替换回原图像的相应位置# 7. 图片输出cv2.imshow('image_np', image_np)cv2.waitKey(0)cv2.imwrite('image_np.png', image_np)"""
整体逻辑:读取主图像和logo图像将logo转换为灰度图像并创建反向二值化掩膜从主图像中提取与logo相同大小的ROI区域使用掩膜在ROI区域中保留背景部分将处理后的ROI背景与logo图像相加融合将融合结果放回主图像的原始位置显示最终结果这种方法确保了logo能够自然地叠加到主图像上,同时保持了主图像背景在logo透明区域的可见性。
"""

ROI切割图像:roi.jpg

掩膜图像:image_np_bg.jpg

最后得到的图像:

    http://www.dtcms.com/a/355765.html

    相关文章:

  • 帕萨特盘式制动器cad+设计说明书
  • TensorFlow 面试题及详细答案 120道(41-50)-- 数据输入与管道
  • workflow/http_parser源码解密:HTTP解析器的双倍扩容与零拷贝策略
  • 【C#】征服 .NET Framework 4.8 中的“古董”日期格式:/Date(1754548600000)/ 和 ISO 8601
  • 【Nacos】优雅规范的使用和管理yml配置文件
  • 苍穹外卖项目笔记day01
  • 工业级TF卡NAND + 北京君正 + Rk瑞芯微的应用
  • 本地大模型部署(下载) vs. 从头训练大模型
  • APP手游使用游戏盾SDK为何能有效抵御各类攻击?
  • ApiFox高并发测试用例
  • hintcon2025 IMGC0NV
  • 2024中山大学研保研上机真题
  • 多模态融合新纪元:Ovis2.5 本地部署教程,实现文本、图像与代码的深度协同推理
  • 力扣hot100:滑动窗口最大值优化策略及思路讲解(239)
  • MySQL 索引失效全解析与优化指南
  • 【软考】中级网络工程师历年真题合集下载(2015-2024)
  • Java多线程超详学习内容
  • Python 中的反射机制与动态灵活性
  • Spring学习笔记:Spring JDBC(jdbc Template)的深入学习和使用
  • 行业前瞻:在线教育系统源码与网校APP开发的技术进化方向
  • C++学习笔记之异常处理
  • Pruning-Guided Curriculum Learning
  • 机器视觉学习-day06-图像旋转
  • MPPT的基本原理
  • 如何循环同步下载文件
  • Yolov8 pose 推理部署笔记
  • HTML应用指南:利用POST请求获取全国中国工商银行网点位置信息
  • 序列化,应用层自定义协议
  • 万博智云联合华为云共建高度自动化的云容灾基线解决方案
  • 浅谈JMeter Listener