opencv 给图片和视频添加水印

给图片和视频添加水印

  • [1 给图片添加水印](#1 给图片添加水印)
  • [2 给视频添加水印](#2 给视频添加水印)

1 给图片添加水印

代码如下:

python 复制代码
 '''添加水印''' 
    img=cv2.imread(r'../15day4.10/src/xiaoren.png')  
    img2=cv2.imread(r'../15day4.10/src/bg.png')  
    h,w,c=img.shape
    RIO_img2=img2[100:100+h,200:200+w]
    img3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    _,black=cv2.threshold(cv2.cvtColor(img,cv2.COLOR_BGR2GRAY),30,255,cv2.THRESH_BINARY)
    _,white=cv2.threshold(cv2.cvtColor(img,cv2.COLOR_BGR2GRAY),30,255,cv2.THRESH_BINARY_INV)
    img_bit=cv2.bitwise_and(img,img,mask=white)
    RIO2_img2=cv2.bitwise_and(RIO_img2,RIO_img2,mask=black)
    RIO_img2[::]=cv2.add(RIO2_img2,img_bit)
    cv2.imshow('img',img)
    cv2.imshow("img2",img2)
    # cv2.imshow('RIO_img2',RIO_img2)
    # cv2.imshow('RIO2_img2',RIO2_img2)
    cv2.imshow('img_bit',img_bit)
    cv2.imshow('white',white)
    
    # cv2.imshow('img3',img3)
    cv2.waitKey(0)


步骤:

  • 1.读取logo图和背景图
  • 2.将logo图的 h,w,c=img.shape求出
  • 3.根据logo图高宽,在背景图里用RIO切割出和logo图形状一样的切片出来
  • 4.在对logo图进行掩膜运算得到白色logo
  • 5.对掩膜运算的logo进行反阈值处理得到黑色的logo
  • 6.再将黑色logo对背景图的切片进行按位与运算,使得黑色logo出现在背景图的切片中(只会有黑色logo区域变为黑色,其余不变)
  • 7 将白色logo与logo的原图进行按位与运算得到,原图的logo的部分
  • 8有黑色logo的切片与原图的logo进行相加,再赋值给原背景图的切片部分,最后语言背景图就有了logo了(切片与原图内存共享)

2 给视频添加水印

代码如下:

python 复制代码
def test11(img2,img):
    '''添加水印''' 
    # img=cv2.imread(r'../15day4.10/src/xiaoren.png')  
    # img2=cv2.imread(r'../15day4.10/src/bg.png')  
    h,w,c=img.shape
    RIO_img2=img2[100:100+h,200:200+w]
    img3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    _,black=cv2.threshold(cv2.cvtColor(img,cv2.COLOR_BGR2GRAY),30,255,cv2.THRESH_BINARY)
    _,white=cv2.threshold(cv2.cvtColor(img,cv2.COLOR_BGR2GRAY),30,255,cv2.THRESH_BINARY_INV)
    img_bit=cv2.bitwise_and(img,img,mask=white)
    RIO2_img2=cv2.bitwise_and(RIO_img2,RIO_img2,mask=black)
    RIO_img2[::]=cv2.add(RIO2_img2,img_bit)
    # cv2.imshow('img',img)
    # cv2.imshow("img2",img2)
    # # cv2.imshow('RIO_img2',RIO_img2)
    # # cv2.imshow('RIO2_img2',RIO2_img2)
    # cv2.imshow('img_bit',img_bit)
    # cv2.imshow('white',white)
    
    # cv2.imshow('img3',img3)
    # cv2.waitKey(0)
    return img2
def test12():
    '''给视频添加logo'''
    path=r'../15day4.10/src/谁.mp4'
    img2=cv2.imread(r"../15day4.10/src/xiaoren.png")
    cap=cv2.VideoCapture(path) #获取视频
    while True:
        # 获取每一帧的图片
        ret,img=cap.read()
        # ret表示是否获取到视频中的图片
        if ret:
            img=test11(img,img2)
            cv2.imshow("img",img)
            if cv2.waitKey(17)&0xff==ord('q'):
                break
        else:
            break
            
    
相关推荐
tuanxiang21 小时前
中英文AI检测的跨语系误判问题排查与修复
人工智能
冬奇Lab1 天前
开源项目第178期:OptMem — 426 个 token 的提示词,给 AI Agent 跨会话的持久记忆
人工智能·开源·资讯
冬奇Lab1 天前
代码库知识库系列(09):用 codebase-memory-mcp 实战——在 LightRAG 上跑三路召回
人工智能
科技圈观察1 天前
选哪家服务商做跨境业务KYC数字身份认证和合规支持?2026出海选型参考
大数据·人工智能
手写码匠1 天前
华为云Flexus+DeepSeek征文|Dify 多智能体协同编排实战:R1 规划 + V3 执行,构建企业 Agent 团队
人工智能·深度学习·算法·aigc
舒一笑1 天前
Windows + WSL2 完整复现 Avernet WAIC 6 Bot 协作演示
人工智能·git·开源
犀利豆1 天前
我和 Claude Code 一起写了一本介绍 Claude Code 原理的书
人工智能·ai编程·claude
墨_浅-1 天前
20260805金融科技动向:《知识产权保护和运用“十五五”规划》金融机遇
人工智能·科技·金融
微硬创新1 天前
耐达讯自动化16路0-20mA转PROFINET协议转换模块技术说明
人工智能·网络协议·自动化·信息与通信