分享

python_opencv:改图片背景,将一张图片的背景改为另一张图片的

 pythonjava学习 2023-05-26 发布于云南

问题描述:有两张图片,需要将一张图片的背景改为另一张图片的背景。
解决方法:用颜色分割的方法,找到第1张图片的背景,将之用逐像素地赋值给另一张图片。

上一篇介绍改了证件照的背景颜色,但是并不是所有需要改背景时都是用同一种颜色的,以下代码实现了将一张图片的背景赋值给另一张图片。

#将一张图片的背景移到另一张图片上

def re_2_bg(img1, img2, newname="new.jpg"):

    img1 = cv2.imread(img1)

    img2 = cv2.imread(img2)

    h, w = img2.shape[0], img2.shape[1]  # 图片高、宽

    print(h, w)

    img1 = cv2.resize(img1, (w, h))

    for row in range(h):

        for col in range(w):

            (b, g, r) = img1[row, col]

            if b >= 219:  # 如果b通道值大于219(蓝色),就将该点替换;注意,此值须得试验,经过多次实验才能确定哪个值最好。

                  img1[row, col] = img2[row, col]

    cv2.imwrite(newname, img1)  # 将图片保存

测试代码:

img1 = "./imgs/wang.jpeg"#图片路径

img2 = "./imgs/fbb.jpg"

re_2_bg(img1, img2)

原来的两张图为:

代码运行后的图为:

注:本文图片均从网上下载。

最后更改后的图片效果不是很理想,原因可能是我这两张图片找得不太好,对wang这幅图片进行了拉伸,然后图片的前景和背景色对比不是特别明显,但是最后的图片很明显是改过了的。

如果选择同一个人,只是背景不一样,效果会更好些。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多