Python grabcut 提取图像前景
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 提取图像前景相关推荐
- python图像纹理提取_提取图像的颜色、纹理特征(传统算法)
Python-Image-feature-extraction Python实现提取图像的纹理.颜色特征,包含快速灰度共现矩阵(GLCM).LBP特征.颜色矩.颜色直方图.1044197988/Pyt ...
- Python+OpenCV:交互式图像前景提取(Interactive Foreground Extraction using GrabCut Algorithm)
Python+OpenCV:交互式图像前景提取(Interactive Foreground Extraction using GrabCut Algorithm) ################# ...
- OpenCV python GrabCut算法提取前景背景图片
OpenCV python GrabCut算法提取前景背景图片 处理图片:[lena_color.jpg] 手动mask[mask.jpg] import numpy as np import cv2 ...
- 使用Python,OpenCV从静态背景中提取移动前景
使用Python,OpenCV从静态背景中提取移动前景 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍OpenCV中的背景减法方法--即从静态背景中提取移动前景.在许多基于视觉的应用中,背 ...
- python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...
python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...
- python提取列表中文本_python提取图像的名字*.jpg到txt文本的方法
如下所示: # -*- coding:utf-8 -*- import sys sys.path.append('E:\\Anaconda\\libs') import os #os:操作系统相关的信 ...
- python获取图片名称_python提取图像的名字*.jpg到txt文本的方法
如下所示: # -*- coding:utf-8 -*- import sys sys.path.append('E:\\Anaconda\\libs') import os #os:操作系统相关的信 ...
- python图片截取特定部分_如何在Python中使用OpenCV提取图像的特定部分?
我正在尝试通过执行精明的边缘检测来提取图像的一部分.我已经成功地创建了该对象的掩码.但是,当我对原始图像执行bitwise_and操作以提取前景部分时,会出现以下错误.OpenCV Error: As ...
- OpenCV python 提取图像内的三色
OpenCV python 提取图像内的三色 原图 [opencv.jpg] import cv2 import numpy as npdef main():# 1.导入图片img_src = cv2 ...
最新文章
- 我酸了~腾讯员工平均月薪 7.6 万 | 每日趣闻
- 在Windows 8下成功安装.Net3.5的方法
- Android远程桌面助手(B1391)
- mysql 使用表 语句_【mysql】mysql 经常使用建表语句
- tomcat_动态java项目的目录结构
- word2003如何设置护眼模式_手机屏幕的护眼模式是如何保护你的眼睛?
- 话里话外:谁才是流程的主人
- 以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机...
- C# 替换string字符串指定位置的字符
- android:windowSoftInputMode属性;界面关闭后软键盘不隐藏的解决方法;
- python编程实战(一):用户登录模块,用户注册、登录、信息管理、功能设计与实现!
- [日常]wps插入页眉页脚
- 离散数学 之 命题公式的主析取合取范式(java实现)
- 与其骑会三处。汉军不知羽所居
- 【读书笔记】Robot Framework 的变量
- 手柄摇杆控制角色移动
- Huawei/华为WATCH GT2e智能手表,包邮免费送!
- yml文件中、<<、 * 是什么意思
- 使用malloc为指针分配内存空间
- 【信息系统项目管理师】2018下半年信息系统项目管理师考试案例分析