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

图像预处理-添加水印

一.ROI切割

        类似裁剪图片,但是原理是基于Numpy数组的切片操作(ROI数组切片是会修改原图数据的),也就是说这个“裁剪”不是为了保存“裁剪”部分,而是为了方便修改等处理。

import cv2 as cv
import numpy as npimg = cv.imread('../images/demo.png')# 前面是height,后面是width
roi = img[70:380, 81:450]cv.imshow('Original', img)
cv.imshow('ROI', roi)
cv.waitKey(0)
cv.destroyAllWindows()

二.图像添加水印

        也将一张图片中的某个物体或者图案提取出来,然后叠加到另一张图片上。通过将原始图片转换成灰度图,并进行二值化处理,得到一个类似掩膜的图像。

        简要来讲,就是得到一个目标区域大小的黑背景白logo掩膜(获取logo颜色),和一个白背景黑logo掩膜(获取背景颜色),然后两个分别对logo原图和目标区域进行与运算,然后处理后的两个图做饱和运算,就可以得到有颜色有背景的图了。

2.1 模板输入

        就是包含水印的图片,先灰度化后二值化(分别用阈值法和反向阈值法),这就得到了白色logo黑背景的掩膜和黑logo白色背景的掩膜。

import cv2 as cv
import numpy as npimg = cv.imread('../images/ymb3.jpg')# 进行灰度转化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 二值化(阈值法),后续获取原logo颜色
_, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY)
# 二值化(反阈值法),后续获取目标区域背景色
_, binary_inv = cv.threshold(gray, 127, 255, cv.THRESH_BINARY_INV)# 显示图像
cv.imshow('binary', binary)
cv.imshow('binary_inv', binary_inv)
cv.waitKey(0)
cv.destroyAllWindows()

2.2 与运算

        根据掩膜的大小切割出一个ROI区域,也就是我们要添加水印的区域,之后让其与模板的两个掩膜进行运算,就可以得到有logo黑背景黑logo有目标区域背景的掩膜。

import cv2 as cv
import numpy as nplogo = cv.imread('../images/ymb3.jpg')
sy = cv.resize(logo, (150, 150))
img = cv.imread('../images/lvbo.png')# 进行灰度转化
gray = cv.cvtColor(sy, cv.COLOR_BGR2GRAY)# 二值化(阈值法),后续获取原logo颜色
_, binary = cv.threshold(gray, 200, 255, cv.THRESH_BINARY)
# 二值化(反阈值法),后续获取目标区域背景色
_, binary_inv = cv.threshold(gray, 200, 255, cv.THRESH_BINARY_INV)# ROI区域提取,先获取掩膜大小
print(binary.shape)
print(img.shape)# 从目标图想要加入水印的地方切片一个相同大小的区域
roi = img[100:250, 100:250]# 掩膜与目标图进行与运算,获取目标图中ROI区域的背景色
bg = cv.bitwise_and(roi, roi, mask=binary)# 掩膜与logo进行与运算,获取logo中的水印色
wm = cv.bitwise_and(sy, sy, mask=binary_inv)# 显示图像
cv.imshow('b', binary)
cv.imshow('bi', binary_inv)
cv.imshow('sy', sy)
cv.imshow('bg', bg)
cv.imshow('wm', wm)
cv.waitKey(0)
cv.destroyAllWindows()  

(150, 150)
(626, 1075, 3)

2.3 图像融合

目的就是将图像对应的数组中的对应元素进行相加

        就是opencv两张图相加,饱和运算就是加数值,黑色的区域是0,加5就是5,所以就可以替换黑色变成有颜色的部分。

# 合并logo水印与背景色
dst = cv.add(bg, wm)# 将融合图像插入目标图中
img[100:250, 100:250] = dst
cv.imshow('re', dst)
cv.imshow('result', img)
cv.waitKey(0)
cv.destroyAllWindows()

我这里是因为图片里面很多颜色像白色,所以效果不是很好。

相关文章:

  • 端侧大模型综述On-Device Language Models: A Comprehensive Review
  • 23种设计模式-创建型模式之工厂方法模式(Java版本)
  • TCP连接建立:为什么是三次握手?
  • nohup命令使用说明
  • R4打卡——tensorflow实现火灾预测
  • 【软考-系统架构设计师】ATAM方法及效用树
  • JVM考古现场(二十二):降维打击·用二向箔优化内存模型
  • UE学习记录part18
  • rk算力集群usb做网卡
  • 数据一致性问题剖析与实践(一)——冗余数据存储分布式共识决策中的一致性问题
  • 生成树协议的构成(STP)
  • 贝叶斯均衡
  • 快速认识:数据库、数仓(数据仓库)、数据湖与数据运河
  • 2025第十七届“华中杯”大学生数学建模挑战赛题目B 题 校园共享单车的调度与维护问题完整成品正文33页(不含附录)文章思路 模型 代码 结果分享
  • 【技术派后端篇】canal实现MySQL/Redis缓存一致性
  • OpenAI 推出一对 AI 推理模型 o3 和 o4-mini
  • 【数据结构_10】二叉树(1)
  • 解析检验平板:设备还是非设备?深入了解其功能与应用(北重铸铁平台厂家)
  • 三、小白如何用Pygame制作一款跑酷类游戏(按键图片和距离的计算)
  • Android Mainline简介
  • 外交部回应中美经贸高层会谈:这次会谈是应美方请求举行的
  • 两国战机均未侵入对方领空,巴方公布对印回击细节
  • 福特汽车撤回业绩指引,警告关税或造成15亿美元利润损失
  • 美CIA发布视频“招募中国官员窃取机密”,外交部:赤裸裸的政治挑衅
  • 恒瑞医药通过港交所上市聆讯,最快或5月挂牌上市
  • 特朗普关税风暴中的“稳”与“变”:新加坡国会选举观察