TensorFlow实现:图像分割中,抠图和替换背景是怎样完成的

我习惯用tensorflow,所以这里读取图片采用的tensorflow,但是,使用OpenCV同样可以,处理图片使用的OpenCV

目标

我这里用的汽车图片,我们目标是将汽车抠出来,然后替换背景,第二章的黑白图,是图片分割结果的mask图片(图片需要下载和代码放同一个位置,注意修改图片名称:tt.jpg 和 tt_mask.gif)

原图
tt.jpgmask
tt_mask.gif

思路

抠图思路

  1. 将图片读取后,mask图片需要处理为二进制图片
  2. 使用OpenCV的bitwise_and,对原图和mask二进制进行抠图

替换背景思路

  1. 新建一个背景图
  2. mask二进制文件需要反转一下(图片中的0变为1,1变为0)
  3. 利用反转后的mask文件,扣掉背景图中汽车所在的位置
  4. 将3步得到的背景图 和 前面扣除来的汽车进行相加就行了
  5. 为了看起来更自然,可以使用高斯模糊进行处理一下

代码

抠图

需要的包
import cv2
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
1. 读取图片
  • 我这里用的tensorf读取的图片,你也可以使用OpenCV读取图片,整体思路是一样
# 原图

path = "tt.jpg"
img = tf.io.read_file(path)
img = tf.image.decode_jpeg(img, channels=3)

# mask
path_mask = "tt_mask.gif"
img_mask = tf.io.read_file(path_mask)
img_mask = tf.image.decode_jpeg(img_mask, channels=3)
2. 由于是tensorflow读取的图片,为方便OpenCV处理,需要转换为numpy格式
img = img.numpy()
img_mask = img_mask.numpy()
3. mask图片为了方便后面计算,我直接转换为二进制文件
img_mask = cv2.threshold(img_mask, 1, 255, cv2.THRESH_BINARY)[1]
4.(关键代码)下面我就开始利用mask抠图了
  • sub_img:就是抠图的效果
sub_img = cv2.bitwise_and(img,img_mask)
plt.imshow(sub_img)

效果如下:在这里插入图片描述

替换背景

制作背景图(纯绿色)
background = np.zeros_like(img)
background[:,:,:]  = (12, 198, 150)
plt.imshow(background)

在这里插入图片描述

对背景图进行抠图
background = cv2.bitwise_and(background, cv2.bitwise_not(img_mask))
plt.imshow(background)

在这里插入图片描述

用扣完的背景图,和扣完的汽车图进行相加
new_img = cv2.add(background, sub_img)
plt.imshow(new_img)

在这里插入图片描述

高斯模糊一下,看起来更自然
new_img_blur = cv2.GaussianBlur(new_img, (9,9), 5)
plt.imshow(new_img_blur)

在这里插入图片描述

总结

好吧,其实很简单,但是这个抠图问题,影响了我半天,主要是我OpenCV不熟练,再次记录一下,也方便其他菜鸟,有任何疑问,都可留言,我看见后第一时间回复大家

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
iOS上使用OpenCV实现抠图背景替换功能是可行的。OpenCV是一个开源的计算机视觉库,它提供了各种图像处理和分析技术,包括图像分割和图像合成等功能,非常适合进行图像背景替换。 具体实现步骤如下: 1. 导入OpenCV库:在iOS项目,首先需要将OpenCV库导入到项目,并进行相应的配置。 2. 图像分割:使用OpenCV提供的图像分割算法,如GrabCut算法,将目标对象与背景进行分离。该算法需要输入一张包含目标对象的图像,并对其进行初始化,引导GrabCut算法进行分割。 3. 背景替换:根据分割得到的目标对象,将它与另一张背景图像进行合成。可以使用OpenCV提供的透明度混合函数,将目标对象与背景图像进行混合。具体操作是通过像素级的合成运算,计算目标对象像素与背景图像像素之间的混合比例,从而实现替换背景的效果。 4. 后续处理:根据需求,可以对合成后的图像进行调整和优化。例如,可以对合成后的图像进行色彩调整、亮度调整或者模糊处理,以使合成的结果更加自然。 需要注意的是,在实现抠图背景替换功能时,选择合适的图像分割算法和优化方法是非常重要的。这可能需要根据具体需求和实际情况进行调试和优化。 总结起来,使用iOS上的OpenCV库可以很好地实现抠图背景替换功能。通过图像分割背景替换等技术手段,可以将目标对象与不同的背景进行合成,实现抠图背景替换的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值