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
            
    
相关推荐
Psycho_MrZhang10 分钟前
偏导数和梯度
人工智能·机器学习
threelab1 小时前
15.three官方示例+编辑器+AI快速学习webgl_buffergeometry_instancing
人工智能·学习·编辑器
李昊哲小课1 小时前
tensorflow-cpu
大数据·人工智能·python·深度学习·数据分析·tensorflow
qq_189370492 小时前
自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)方法、优势、作用和程序举例
人工智能·自然语言处理·连续词袋
threelab5 小时前
07.three官方示例+编辑器+AI快速学习webgl_buffergeometry_attributes_integer
人工智能·学习·编辑器
背太阳的牧羊人6 小时前
tokenizer.encode_plus,BERT类模型 和 Sentence-BERT 他们之间的区别与联系
人工智能·深度学习·bert
学算法的程霖6 小时前
TGRS | FSVLM: 用于遥感农田分割的视觉语言模型
人工智能·深度学习·目标检测·机器学习·计算机视觉·自然语言处理·遥感图像分类
博睿谷IT99_6 小时前
华为HCIP-AI认证考试版本更新通知
人工智能·华为
一点.点7 小时前
SafeDrive:大语言模型实现自动驾驶汽车知识驱动和数据驱动的风险-敏感决策——论文阅读
人工智能·语言模型·自动驾驶
concisedistinct7 小时前
如何评价大语言模型架构 TTT ?模型应不应该永远“固定”在推理阶段?模型是否应当在使用时继续学习?
人工智能·语言模型·大模型