• 【Python入门教程】OpenCV在图片/视频上添加Logo(水印)


            还是老样子,最近项目需要在视频上添加logo,所以就找了一下相关资料,然后写了一段代码,今天给大家分享一下如何使用Python的OpenCV库给图片或视频添加水印和logo。

    一、导入库

            OpenCV库导入的时候是cv2

    import cv2

    二、代码部分

    2.1 基础逻辑

    1. 通过二值化阈值筛选出需要的Logo部分
    2. 将logo部分制作成掩膜
    3. 使用掩膜和logo范围提取图片的背景
    4. 使用反向掩膜提取需要的logo部分
    5. 将背景和logo叠加显示到原图上

    2.2 完整代码

            这里我做了三个入参,图片地址、logo地址、logo放缩的尺寸。logo放在左上角,尺寸视情况自己修改。

    1. # -*- coding: utf-8 -*-
    2. """
    3. @Time : 2023/10/20 17:34
    4. @Auth : RS迷途小书童
    5. @File :Image_Add_Logo.py
    6. @IDE :PyCharm
    7. @Purpose:图片/视频添加水印
    8. """
    9. import cv2
    10. def Image_add_logo(image_path, logo_path, size=(403, 161)):
    11. image1 = cv2.imread(image_path)
    12. image2 = cv2.imread(logo_path)
    13. image2 = cv2.resize(image2, size)
    14. rows, cols, channels = image2.shape
    15. # 获取logo的行列、通道数
    16. roi = image1[0:rows, 0:cols]
    17. # 从image1中切割出一个与image2大小相同的区域,作为ROI(Region of Interest)
    18. image2gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
    19. # 将image2转化为灰度图像,以便于进行阈值化处理
    20. ret, mask = cv2.threshold(image2gray, 254, 255, cv2.THRESH_BINARY)
    21. # ret阈值被忽略,mask二值化图像。大于254的值赋值为255,小于254的值赋值为0
    22. mask_reverse = cv2.bitwise_not(mask)
    23. # 按位取反操作,0变255,255变0
    24. image1_background = cv2.bitwise_and(roi, roi, mask=mask)
    25. # 按位与操作,保留掩膜之后的背景
    26. image2_logo = cv2.bitwise_and(image2, image2, mask=mask_reverse)
    27. # 按位与操作,保留掩膜之后的logo
    28. result = cv2.add(image1_background, image2_logo)
    29. # 将背景和logo叠加
    30. image1[0:rows, 0:cols] = result
    31. # 将新的图像覆盖到原图像image1的相应位置
    32. # cv2.imshow("Image", image1) # 显示叠加图像
    33. # cv2.waitKey(0)
    34. cv2.destroyAllWindows()
    35. return image1
    36. if __name__ == "__main__":
    37. Image = r"G:\Neat Download Manager\Compressed\video/100000022.png"
    38. Logo = r"G:\Neat Download Manager\Compressed\video/logo.png"
    39. Size = (604, 242)
    40. image = Image_add_logo(Image, Logo, Size)

    三、总结

            这个博文没有写如何在视频中添加logo,因为原理是一样的。cv2库在读取视频时就是逐帧读取,所以本质就是图片,我之前已经发过如何使用OpenCV库将视频拆帧成图片,然后如何用图片生成视频,所以这里就不分享了。只要大家将这两篇博文的内容组合一下,就可以实现视频添加Logo,链接:基于OpenCV视频分解成图片+图片组合成视频(视频抽帧组帧)

  • 相关阅读:
    如何将数据库迁移到 Amazon Aurora
    GameFi的发展路径
    micropython 可视化音频 频谱解析(应该是全网首家)(预告,还没研究完成)
    String、StringBuffer以及StringBuilder的比较
    【安装笔记-20240616-Windows-Gpg4win 证书管理器】
    BL200EC如何与欧姆龙相连
    C++ gstreamer函数使用总结
    ESP32单片机环境搭建(VScode + PlatformIO IDE)
    深入了解 Postman Test 校验的使用方法
    边缘计算机的概念和应用,边缘计算发展前景
  • 原文地址:https://blog.csdn.net/m0_56729804/article/details/134535042