背景替换(opencv、python),照片、证件照的背景替换(抠图)

目录

  • 步骤:
    • 导入库
      • 1、读入将要抠图的图片
      • 2、create一个带颜色域的mask
      • 3、通过mask使得原图只显示汽车,即抠出所需要的部分
      • 4、将要替换掉的图像resize或裁剪到和上述图片一样的大小
      • 5、将该图片预留出将要重叠上的部分,即将mask部分改为(0,0,0)
      • 6、通过和运算使得两部分图片mask部分替换
      • 7、最后保存图片

步骤:

导入库

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import cv2

%matplotlib inline

1、读入将要抠图的图片

image = mpimg.imread('images/car_green_screen.jpg')
image_copy=np.copy(image)

背景替换(opencv、python),照片、证件照的背景替换(抠图)_第1张图片

2、create一个带颜色域的mask

lower_green = np.array([0,80,0]) 
upper_green = np.array([80,255,80])
mask = cv2.inRange(image, lower_green, upper_green)

背景替换(opencv、python),照片、证件照的背景替换(抠图)_第2张图片

3、通过mask使得原图只显示汽车,即抠出所需要的部分

masked_image = np.copy(image)
masked_image[mask != 0] = [0, 0, 0]

背景替换(opencv、python),照片、证件照的背景替换(抠图)_第3张图片

4、将要替换掉的图像resize或裁剪到和上述图片一样的大小

background_image = mpimg.imread('images/sky.jpg')
crop_background_image = background_image[0:450,0:660]

以下为裁剪

原图:
背景替换(opencv、python),照片、证件照的背景替换(抠图)_第4张图片

裁剪后:
背景替换(opencv、python),照片、证件照的背景替换(抠图)_第5张图片

5、将该图片预留出将要重叠上的部分,即将mask部分改为(0,0,0)

crop_background = np.copy(crop_background_image)
crop_background[mask == 0] = [0,0,0]

背景替换(opencv、python),照片、证件照的背景替换(抠图)_第6张图片

6、通过和运算使得两部分图片mask部分替换

complete_image = masked_image + crop_background

背景替换(opencv、python),照片、证件照的背景替换(抠图)_第7张图片

7、最后保存图片

mpimg.imsave('skyandcar.jpg',complete_image)

你可能感兴趣的:(opencv)