这是需要抠图的原图像,文件名为 “messi5.jpg”

使用矩形方式处理:

# -*- coding: utf-8 -*-import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('messi5.jpg')
# 返回一个和图片等尺寸、且全为0的矩阵
mask = np.zeros(img.shape[:2],np.uint8)# 返回1*65、且全为0的矩阵
# grabCut 算法用到,无需关心
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)# 前景在矩形框以内
rect = (64,67,467,355)
# 函数的返回值是更新的 mask, bgdModel, fgdModel
# https://blog.csdn.net/github_39611196/article/details/81143026
# mask 掩码图像,用于确定哪些可能是前景/背景
# rect 前景矩形,格式为 (x1,y1,x2,y2)
# 5 算法迭代次数
# cv2.GC_INIT_WITH_?? 前景提取模式是矩形形式还是掩码的形式
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)# 根据是否条件满足,返回元素为0/1的数组
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
# np.newaxis 增加一个维度,
# 将二维2*3的矩阵 [[0 0 0] [0 0 0]] 变成
# 三维2*3*1的矩阵 [ [ [0] [0] [0] ] [ [0] [0] [0] ] ]
# print(mask2)
# print('\nwaxis\n',mask2[:,:,np.newaxis].shape)
# 数组相乘,得到每个元素的乘积
img = img*mask2[:,:,np.newaxis]plt.imshow(img),plt.colorbar(),plt.show()

使用矩形模式 图像处理结果:

使用掩模方式处理:

打开网址 :https://www.tuyitu.com/photoshop/

将原图像上传,新建图层,绘制前景-背景掩模图像:

绘制方式为:一定是前景-白色;一定是背景-黑色;可能是背景-灰色(144色值)

保存掩模图层,命名为 “newmask.png”

执行下列程序:

# -*- coding: utf-8 -*-import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('messi5.jpg')
# 返回一个和图片等尺寸、且全为0的矩阵
mask = np.zeros(img.shape[:2],np.uint8)# 返回1*65、且全为0的矩阵bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
rect = (64,67,467,355)
# newmask is the mask image I manually labelled
newmask = cv2.imread('newmask.png',0)
# whereever it is marked white (sure foreground), change mask=1
# whereever it is marked black (sure background), change mask=0
# 黑色一定是背景
mask[newmask == 0] = 0
# 白色一定是前景
mask[newmask == 255] = 1
# 灰色可能是背景
mask[newmask == 145] = 2# 打印看看灰色色值
print(newmask[:,100])# 注意 newmask 一定是按要求的图层保存,否则函数会错误
# 建议使用Photoshop或在线PS工具:https://www.tuyitu.com/photoshop/
# 函数的返回值是更新的 mask, bgdModel, fgdModel
# mask 掩码图像,用于确定哪些可能是前景/背景
# None 前景矩形,未用到
# 5 算法迭代次数
# GC_INIT_WITH_MASK 掩码的形式提取
mask, bgdModel, fgdModel = cv2.grabCut(img,mask,None,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_MASK)
mask = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask[:,:,np.newaxis]
plt.imshow(img),plt.colorbar(),plt.show()

处理图像结果:

直接使用掩模方式,只需在图像中画上几笔,就可以将前景人物完美提取出来,可见 grabCut 函数非常强大。

参考资料:OpenCV官方教程中文版(For Python).pdf

Python OpenCV 交互式前景提取 自动抠图相关推荐

  1. OpenCV使用 GrabCut 算法进行交互式前景提取

    OpenCV使用 GrabCut 算法进行交互式前景提取 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python,OpenCV中的GrabCut 算法来提取图像中的前景,并为此创建一个交互 ...

  2. 图像分割与提取:交互式前景提取(附OpenCV代码实现)

    一.简介 经典的前景提取技术主要使用纹理(颜色)信息,如魔术棒工具,或根据边缘(对比度)信息,如智能剪刀等完成.2004 年,微软研究院(剑桥)的 Rother 等人在论文 GrabCut: Inte ...

  3. OpenCV中的图像处理 —— 霍夫线 / 圈变换 + 图像分割(分水岭算法) + 交互式前景提取(GrabCut算法)

    OpenCV中的图像处理 -- 霍夫线 / 圈变换 + 图像分割(分水岭算法) + 交互式前景提取(GrabCut算法)

  4. OpenCV系列之交互式前景提取使用GrabCut算法 | 三十五

    目标 在本章中, 我们将看到GrabCut算法来提取图像中的前景 我们将为此创建一个交互式应用程序. 理论 GrabCut算法由英国微软研究院的Carsten Rother,Vladimir Kolm ...

  5. opencv29:使用Grabcut算法的交互式前景提取

    目标 在这一章当中 看到 GrabCut算法来提取图像中的前景 为此创建一个交互式应用程序 理论 GrabCut 算法由英国剑桥微软研究院的 Carsten Rother.Vladimir Kolmo ...

  6. python Opencv和pyautogui实现自动识图点击

    python Opencv和pyautogui实现自动识图点击 1.导入python及其他模块 匹配类是上一章博客内容,pyautogui自带的图片匹配效果不是很理想.就使用Opencv的图片匹配来实 ...

  7. 要点初见:Python+OpenCV校正并提取表格中的各个框

    最近做了个手写汉字简历识别比赛,需要先提取表格中含有指定信息的各个框,再用TensorFlow对框中的信息进行汉字.数字.英文识别.代码已开源:https://github.com/BingLiHan ...

  8. 【OpenCV-Python】教程:3-16 利用Grabcut交互式前景提取

    OpenCV Python Grabcut分割 [目标] Grabcut 算法 创建一个交互程序 [理论] 从用户角度是如何工作的呢?用户在需要的目标上初始绘制一个矩形,前景目标必须完全在矩形内部,算 ...

  9. 迭代图像切割技术的交互式前景提取

    ----- -----<"GrabCut" - Interactive Foreground Extraction using Iterated Graph Cuts> ...

最新文章

  1. DBUtils使用详解
  2. 一键导出Origin图片MATLAB代码
  3. java中printarray和selectsort方法_算法题(一)
  4. CodeForces - 722C Destroying Array(倒着并查集+离线处理)
  5. 同学们,看看这里吧!!!
  6. 如何得到webbrowser的句柄
  7. php定义浏览器编码,从php脚本到浏览器,编码方式浅析
  8. java中怎么声明常量_如何在Java中声明一个常量
  9. Loadrunner请求自定义的http(json)文件and参数化
  10. 上下左右箭头的ASCII值
  11. chrome浏览器关闭更新弹窗
  12. ECMAScript和JavaScript的关系
  13. “Entity Data Modle Designer 无法显示”的问题
  14. python喜马拉雅_Python爬虫实战案例:取喜马拉雅音频数据详解!
  15. 古龙108将,喜欢古龙的来看啦
  16. 交换机入门小知识2(MAC地址、交换机如何处理数据帧)
  17. Java设计模式(疯狂Java联盟版)
  18. volatile限定符
  19. Java打印实心菱形和空心菱形
  20. Web 前端从入门菜鸟到实践老司机所需要的资料与指南合集

热门文章

  1. 游历魔法王国(牛客网 网易2018校招题 图论)
  2. Processing 使用摄像头(6)
  3. SpringBoot与ElasticSearch、ActiveMQ、RocketMQ的整合及多环境配置、响应式框架WebFlux、服务器端主动推送SSE技术、生产环境部署、Actuator监控平台
  4. ❤有学妹问我Java架构师怎么入门,我甩出12k亲身体验的学习视频推荐给她
  5. 神奇的大疆机甲大师来了!fire!fire!fire!
  6. python scipy使用余弦定理求句子相似度
  7. 声艺fx16调音台怎么样_声艺(Soundcraft) FX16Ⅱ(RW5757)16路/2立体声 专业调音台
  8. 【软件测试常见Bug清单】
  9. 爆肝200天!18岁上海高中生自制机器人,250行Python代码「注入灵魂」
  10. Excel自定义函数(编写与全局加载)