grabcut是一个非常实用的提取图像前景的算法。该方法是一种基于图切割的图像分割方法,是基于graph cut算法的改进。grabcut是需要少量用户交互操作。简单的说,就是需要用户指定要识别的区域。

opencv中提供了grabcut函数,直接调用就可以实现图像前景的提取。该函数的说明如下:

 mask, bgdModel, fgdModel = cv2.grabCut(img, mask, rect, bgdModel, fgdModel, iterCount, mode=None)

参数说明:

 - img: 输入图像,支持8位3通道- mask: 掩码图像,可以设置为:GCD_BGD(=0),背景;GCD_FGD(=1),前景;GCD_PR_BGD(=2),可能的背景;GCD_PR_FGD(=3),可能的前景。- rect: 前景的矩形,格式为(x,y,w,h),分别为左上角坐标和宽度,高度- bdgModel, fgdModel: 算法内部是用的数组,只需要创建两个大小为(1,65)np.float64的数组。- iterCount: 迭代次数- mode:使用矩阵模式还是蒙板模式cv2.GC_INIT_WITH_RECTcv2.GC_INIT_WITH_MASK

下面的例子是简单的提取前景应用:

import numpy as np
import cv2
# 读取图像
img = cv2.imread('d:\\girl.png')
mask = np.zeros(img.shape[:2], np.uint8)
rect=(31,51,164,289)
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)
cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 10, cv2.GC_INIT_WITH_RECT)
img_f = img.copy()
mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')
img_f = img * mask2[:, :, np.newaxis]
# 显示图像
cv2.imshow("img", img)
cv2.imshow("img_f",img_f)
cv2.waitKey()
cv2.destroyAllWindows()

结果:

框定前景的矩形选择很重要。如果选择不好,最后的结果会有小的问题。可以通过调整矩形来获得更好的结果。

Python grabcut 提取图像前景相关推荐

  1. python图像纹理提取_提取图像的颜色、纹理特征(传统算法)

    Python-Image-feature-extraction Python实现提取图像的纹理.颜色特征,包含快速灰度共现矩阵(GLCM).LBP特征.颜色矩.颜色直方图.1044197988/Pyt ...

  2. Python+OpenCV:交互式图像前景提取(Interactive Foreground Extraction using GrabCut Algorithm)

    Python+OpenCV:交互式图像前景提取(Interactive Foreground Extraction using GrabCut Algorithm) ################# ...

  3. OpenCV python GrabCut算法提取前景背景图片

    OpenCV python GrabCut算法提取前景背景图片 处理图片:[lena_color.jpg] 手动mask[mask.jpg] import numpy as np import cv2 ...

  4. 使用Python,OpenCV从静态背景中提取移动前景

    使用Python,OpenCV从静态背景中提取移动前景 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍OpenCV中的背景减法方法--即从静态背景中提取移动前景.在许多基于视觉的应用中,背 ...

  5. python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...

    python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...

  6. python提取列表中文本_python提取图像的名字*.jpg到txt文本的方法

    如下所示: # -*- coding:utf-8 -*- import sys sys.path.append('E:\\Anaconda\\libs') import os #os:操作系统相关的信 ...

  7. python获取图片名称_python提取图像的名字*.jpg到txt文本的方法

    如下所示: # -*- coding:utf-8 -*- import sys sys.path.append('E:\\Anaconda\\libs') import os #os:操作系统相关的信 ...

  8. python图片截取特定部分_如何在Python中使用OpenCV提取图像的特定部分?

    我正在尝试通过执行精明的边缘检测来提取图像的一部分.我已经成功地创建了该对象的掩码.但是,当我对原始图像执行bitwise_and操作以提取前景部分时,会出现以下错误.OpenCV Error: As ...

  9. OpenCV python 提取图像内的三色

    OpenCV python 提取图像内的三色 原图 [opencv.jpg] import cv2 import numpy as npdef main():# 1.导入图片img_src = cv2 ...

最新文章

  1. 我酸了~腾讯员工平均月薪 7.6 万 | 每日趣闻
  2. 在Windows 8下成功安装.Net3.5的方法
  3. Android远程桌面助手(B1391)
  4. mysql 使用表 语句_【mysql】mysql 经常使用建表语句
  5. tomcat_动态java项目的目录结构
  6. word2003如何设置护眼模式_手机屏幕的护眼模式是如何保护你的眼睛?
  7. 话里话外:谁才是流程的主人
  8. 以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机...
  9. C# 替换string字符串指定位置的字符
  10. android:windowSoftInputMode属性;界面关闭后软键盘不隐藏的解决方法;
  11. python编程实战(一):用户登录模块,用户注册、登录、信息管理、功能设计与实现!
  12. [日常]wps插入页眉页脚
  13. 离散数学 之 命题公式的主析取合取范式(java实现)
  14. 与其骑会三处。汉军不知羽所居
  15. 【读书笔记】Robot Framework 的变量
  16. 手柄摇杆控制角色移动
  17. Huawei/华为WATCH GT2e智能手表,包邮免费送!
  18. yml文件中、<<、 * 是什么意思
  19. 使用malloc为指针分配内存空间
  20. 【信息系统项目管理师】2018下半年信息系统项目管理师考试案例分析

热门文章

  1. AMD intel CPU 型号对比
  2. 如何自动删除您的YouTube历史记录
  3. 车子Linux系统,Linux车载系统Automotive Grade Linux
  4. 数据结构算法之数组篇
  5. 商淘软件WSTMart怎么样
  6. 苹果MacBook Pro usb连接iPhone反复重连解决方法
  7. 大数据工程师的日常工作内容是干嘛?
  8. 任意大小icon图标制作方法
  9. 解决scalac Error: bad option -make:transitive
  10. 如何通过笔记本控制主机(远程链接别的电脑)