opencv python 实现图片添加带透明的 logo

   图片叠加logo ffmpeg可以一条简单命令实现,  

 ffmpeg -i D:\left\l0.jpg -i D:\logo\fst.png -lavfi [1]scale=160:-1[s1];[0][s1]overlay=20:50 -y  D:\out\ooo_log3.mp4

 但是Opencv实现有点麻烦, 特别是百度出来的一些文章, 各种mask ,bitwise 各种复杂操作

如下应该是个印度小哥的实现. 非常完美实现了功能.效果如下

 黄色icon是带透明的 png图片, 如此完美叠加.

import cv2

def transparentOverlay(src, overlay, pos=(0, 0), scale=1):
    """
    :param src: Input Color Background Image
    :param overlay: transparent Image (BGRA)
    :param pos:  position where the image to be blit.
    :param scale : scale factor of transparent image.
    :return: Resultant Image
    """
    overlay = cv2.resize(overlay, (0, 0), fx=scale, fy=scale)
    h, w, _ = overlay.shape  # Size of foreground
    rows, cols, _ = src.shape  # Size of background Image
    y, x = pos[0], pos[1]  # Position of foreground/overlay image
    # loop over all pixels and apply the blending equation
    for i in range(h):
        for j in range(w):
            if x + i >= rows or y + j >= cols:
                continue
            alpha = float(overlay[i][j][3] / 255.0)  # read the alpha channel
            src[x + i][y + j] = alpha * overlay[i][j][:3] + (1 - alpha) * src[x + i][y + j]
    return src
def addImageWatermark(LogoImage,MainImage,opacity,pos=(10,100),):
    opacity = opacity / 100
    OriImg = cv2.imread(MainImage, -1)
    waterImg = cv2.imread(LogoImage, -1)
    tempImg = OriImg.copy()
    print(tempImg.shape)
    overlay = transparentOverlay(tempImg, waterImg, pos)
    output = OriImg.copy()
    # apply the overlay
    cv2.addWeighted(overlay, opacity, output, 1 - opacity, 0, output)
    cv2.imshow('Life2Coding', output)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    #addImageWatermark(r'D:\logo\face.png',r'D:\img\55.jpg',100,(10,100))
    addImageWatermark(r'D:\logo\fst.png',r'D:\img\55.jpg',100,(0,100))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值