git:https://github.com/linyi0604/Computer-Vision

 import numpy as np
import cv2
import matplotlib.pyplot as plt # 读入图片
img = cv2.imread("../data/mm2.jpeg")
# 创建一个和加载图像一样形状的 填充为0的掩膜
mask = np.zeros(img.shape[:2], np.uint8) # 创建以0填充的前景和背景模型
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64) # 定义一个矩形
rect = (100, 50, 421, 378) cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT) """
cv2.grabCut()
参数:
img: 输入图像
mask: 蒙板图像,确定前景区域,背景区域,不确定区域,
可以设置为cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,
也可以输入0,1,2,3
rect: 包含前景的矩形 格式(x, y, w, h)
bdgModel: 算法内部使用的数组. 你只需要创建两个大小为 (1,65),数据类型为 np.float64 的数组
fgdModel: 算法内部使用的数组. 你只需要创建两个大小为 (1,65),数据类型为 np.float64 的数组
iterCount: 算法的迭代次数
mode: 可以设置为 cv2.GC_INIT_WITH_RECT 或 cv2.GC_INIT_WITH_MASK,也可以联合使用。
这是用来确定我们进行修改的方式,矩形模式或者掩模模式 算法会修改掩模图像,在新的掩模图像中,
所有的像素被分为四类:背景,前景,可能是背景/前景使用 4 个不同的标签标记。
然后我们来修改掩模图像,
所有的 0 像素和 1 像素都被归为 0(例如背景),所有的 1 像素和 3 像素都被归为 1(前景)。
我们最终的掩模图像就这样准备好了。用它和输入图像相乘就得到了分割好的图像 原理:
1 输入矩形框,矩形框外部区域都是背景。内部一定包含前景。
2 电脑对输入图像进行初始化,标记前景和背景的像素。
3 使用高斯混合模型(GMM)对前景和背景建模。
4 根据输入,GMM会学习并创建新的像素分布。
对未知的像素(前景或背景不确定),根据他们与已知的分类像素关系进行分类。(类似聚类操作)
5 这样会根据像素的分布创建一幅图,图中节点是像素。
除了像素点是节点以外,还有Source_node和Sink_node两个节点。
所有的前景图像都与Source_node相连。背景与Sink_node相连。
6 像素是否连接到Source_node/end_node依赖于权值,
这个权值由像素属于同一类,也就是前景或者背景的概率来决定。
如果像素的颜色有很大区别,那么他们之间的权重就很小。
7 使用mincut算法对图像进行分割。
它会根据最小代价方程对图像分成source_node和sink_node。
代价方程是指裁剪所有边上权重的和。
裁剪完成后,所有连接到source_node的判定为前景,sink_node上的为背景。
继续此过程,直到分类收敛。 """
mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype("uint8")
img = img*mask2[:, :, np.newaxis] plt.subplot(121), plt.imshow(img)
plt.title("grabcut"), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(cv2.imread("../data/mm2.jpeg"), cv2.COLOR_BGR2RGB))
plt.title("original"), plt.xticks([]), plt.yticks([])
plt.show()

python opencv3 grabcut前景检测的更多相关文章

  1. python opencv3 摄像头人脸检测

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 def detect(): # 创建人脸检测的对象 ...

  2. python opencv3 静态图片检测人脸

    git:https://github.com/linyi0604/Computer-Vision # coding:utf-8 import cv2 filename = "../data/ ...

  3. [综]前景检测GMM

    tornadomeet 前景检测算法_4(opencv自带GMM) http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.html ...

  4. paper 83:前景检测算法_1(codebook和平均背景法)

    前景分割中一个非常重要的研究方向就是背景减图法,因为背景减图的方法简单,原理容易被想到,且在智能视频监控领域中,摄像机很多情况下是固定的,且背景也是基本不变或者是缓慢变换的,在这种场合背景减图法的应用 ...

  5. [转]前景检测算法--ViBe算法

    原文:http://blog.csdn.net/zouxy09/article/details/9622285 转自:http://blog.csdn.net/app_12062011/article ...

  6. 运动检测(前景检测)之(一)ViBe

    运动检测(前景检测)之(一)ViBe zouxy09@qq.com http://blog.csdn.net/zouxy09 因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新的方法和思 ...

  7. 运动检测(前景检测)之(二)混合高斯模型GMM

    运动检测(前景检测)之(二)混合高斯模型GMM zouxy09@qq.com http://blog.csdn.net/zouxy09 因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新 ...

  8. 30行Python代码实现人脸检测

    参考OpenCV自带的例子,30行Python代码实现人脸检测,不得不说,Python这个语言的优势太明显了,几乎把所有复杂的细节都屏蔽了,虽然效率较差,不过在调用OpenCV的模块时,因为模块都是C ...

  9. 2019年Python数据挖掘就业前景前瞻

    Python语言的崛起让大家对web.爬虫.数据分析.数据挖掘等十分感兴趣.数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是数据挖掘.所谓数据挖掘就是指从数据库的大量数据中揭示出隐含的 ...

随机推荐

  1. phpexcel 导入导出excel表格

    phpexcel中文实用手册 转载:http://www.cnblogs.com/freespider/p/3284828.html 下面是总结的几个使用方法 include 'PHPExcel.ph ...

  2. windows 下 react-native(v0.56) Android 环境搭建踩坑记录

    debugservicereact-native 安装官网 https://reactnative.cn/docs/getting-started.html 根据官网步骤一步步执行下去.还能碰到一些问 ...

  3. 反卷积Deconvolution

    反卷积(转置卷积.空洞卷积(微步卷积))近几年用得较多,本篇博客主要是介绍一下反卷积,尤其是怎么计算反卷积(选择反卷积的相关参数) 图1 空洞卷积(微步卷积)的例子,其中下面的图是输入,上面的图是输出 ...

  4. Informatica学习:2、配置存储库服务和集成服务

    继续上一篇的1.安装介质的获取与安装,本文介绍服务端的存储库服务和集成服务的配置. 安装好Informatica的客户端和服务端后,需要登陆Administration Console,配置存储库服务 ...

  5. jQuery基础之二(操作标签)

    一:样式操作 addClass();// 添加指定的CSS类名. removeClass();// 移除指定的CSS类名. hasClass();// 判断样式存不存在 toggleClass();/ ...

  6. 【Loadrunner】LR参数化:利用mysql数据库里面的数据进行参数化

    很多同学都在自学loadrunner去做压力测试,但是如果要利用LR做压力测试,或者是其他工具,其中有一个环节是我们避开不了的,比如说:参数化 今天华华就给大家简要的介绍下,如果你要做的参数化的数据来 ...

  7. Go语言的接口interface、struct和组合、继承

    Go语言的interface概念相对于C++中的基类,通过interface来实现多态功能. 在C++中,当需要实现多态功能时,步骤是首先定义一个基类,该基类使用虚函数或者纯虚函数抽象了所有子类会用到 ...

  8. ORB_SLAM2 源码阅读 ORB_SLAM2::Initializer

    ORB_SLAM2::Initializer 用于单目情况下的初始化. Initializer 的构造函数中传入第一张影像,这张影像被称作 reference frame(rFrame).在获得第二张 ...

  9. java连接redis无法连接,报异常RedisConnectionException

    不管是spring还是原生jedis连接redis,如果连不上多半是linux服务器的问题: 1 首先确保redis端口开放: 把6379或者redis的端口开放即可 2 redis.conf配置注释 ...

  10. 移动端测试=== adb 无线连接手机

    无线连接(需要借助 USB 线) 除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 ...