GrabCut是微软研究院的一个课题,主要功能是分割和抠图。
grabcut是在graph cut基础上改进的一种图像分割算法,它同样是基于图割理论的。
由于背景的复杂度不同所以,grabcut算法抠图的准确性也有很大的差异,所以我使用了hog检测人物再使用grabcut算法抠图,增加了准确性。

这里我是在视频中进行抠图。
代码:

#include<opencv2\opencv.hpp>
#include<vector>
using namespace std;
using namespace cv;int main()
{  int num= 0;VideoCapture cap("f:\\opencv\\image_video_data\\test.mov");if (!cap.isOpened()){return -1;}while (1){Mat image;cap >> image;if (image.empty()){return -1;//    break;}//hog人物检测vector<Rect> found, found_filtered;HOGDescriptor people_dectect_hog;//opencv官方自带了人物检测people_dectect_hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());people_dectect_hog.detectMultiScale(image, found, 0, Size(8, 8), Size(32, 32), 1.05, 1);size_t i, j;//排除嵌套的矩阵for (i = 0; i < found.size(); i++){Rect r = found[i];for (j = 0; j < found.size(); j++)if (j != i && (r&found[j]) == r)break;if (j == found.size())found_filtered.push_back(r);}//进行的是担任的抠图所以,只可检测到一个矩阵Rect rr;rr = found_filtered.at(0);//这里是我根据具体的进行了改动,调整hog检测矩阵的大小,也可以不改Rect rectangle(rr.x*1.1, rr.y, rr.width*0.7, rr.height);Mat result; // segmentation result (4 possible values)  Mat bgModel, fgModel; // the models (internally used)  //opencv的grabcut算法grabCut(image, result,    rectangle,bgModel, fgModel, 1,        GC_INIT_WITH_RECT); compare(result, cv::GC_PR_FGD, result, cv::CMP_EQ);Mat foreground(image.size(), CV_8UC3, cv::Scalar(255, 255, 255));image.copyTo(foreground, result); rectangle(image, rectangle, cv::Scalar(255, 255, 255), 1);namedWindow("Image");imshow("Image", image);namedWindow("Segmented Image");imshow("Segmented Image", foreground);waitKey(20);}return 0;
}

原图:

效果:

就这样了。

抠图-grabCut算法+hog检测相关推荐

  1. GrabCut算法、物体显著性检测

    图割GraphCus算法.利用颜色.纹理等信息对GraphCut进行改进,形成效果更好的GrabCut算法. 对图像的目标物体和背景建立一个K维的全协方差高斯混合模型. 其中,单高斯模型的概率密度函数 ...

  2. python 黑白tif提取边界像素坐标_OpenCV GrabCut算法:前景分割和提取

    点击上方"蓝色小字"关注我呀 文章翻译自光头哥哥的博客,原文链接: https://www.pyimagesearch.com/2020/07/27/opencv-grabcut- ...

  3. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  4. OpenCV GrabCut算法前景分割和提取

    目录 一.OpenCv Grabcut算法:前景提取与分割(Foreground segmentation and extraction) (一)算法工作原理 (二)opencv函数cv2.grabC ...

  5. OpenCV GrabCut算法:前景分割和提取

    目录 一.OpenCv Grabcut算法:前景提取与分割(Foreground segmentation and extraction) (一)算法工作原理 (二)opencv函数cv2.grabC ...

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

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

  7. OpenCV图像分割Grabcut算法

    前言 1.OpenCV图像分割Grabcut算法主要功能是分割和抠图,就是把框着的目标抠出来,比如要分割出一个证件照的人的图像,只需要在目标外面画一个框,把目标框住,它就可以完成良好的分割. 2.算法 ...

  8. 图像特征提取与描述_角点特征04:LBP算法+HOG特征算子

    1.LBP算法 LBP(Local Binary Pattern)指局部二值模式,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点.它是由T. Ojala, M.Pie ...

  9. 做形态学方法的团队_图像分割实战-分水岭分割方法和GrabCut 算法

    1. 分水岭分割方法 它是依赖于形态学的,图像的灰度等级不一样,如果图像的灰度等级一样的情况下怎么人为的把它造成不一样?可以通过距离变换实现,这样它们的灰度值就有了阶梯状的变换.风水岭算法常见的有三种 ...

最新文章

  1. 《中国人工智能学会通讯》——12.38 知识库与 HTML 表格的融合
  2. vs调用matlab复杂,关于VS调用matlab的问题,求教大神
  3. Leetcode 剑指 Offer 58 - II. 左旋转字符串 (每日一题 20210830)
  4. 适用于WinForm的一个定时器类
  5. 【设置字符集】Win7 64位系统安装MySQL5.5.21图解教程
  6. pythonint切片_python-切片
  7. Dynamips和Vmware完成CCVP试验(2)
  8. Linux Shell之一 Shell简介
  9. babel原理_手写webpack核心原理,再也不怕面试官问我webpack原理
  10. linux C(hello world)最大公约数和最小公倍数
  11. Python collections模块总结
  12. iptables 学习笔记 一 要领入门
  13. matlab hist3 密度图,Matlab中hist3
  14. 系统梳理总结JAVA全栈知识点,七面阿里成功斩获P8Offer
  15. 【IP协议(一)】——IP数据报格式及其含义,IP数据报的切分
  16. TCP报文之-tcp dup ack 、tcp Out-of-Order
  17. TreeList 节点拖曳
  18. 复习笔记5-nginx、rabbitmq、redis、jenkins、Docker、ELK、日志、Hadoop
  19. 无法加载操作系统,原因是关键系统驱动程序丢失或包含错误。 文件:\windoiws\system32\drivers\bootsafe64_ev.sys 错误代码:0xc000007b解决方案
  20. Noisy OR (NOR)model

热门文章

  1. 优化问题-LP,QP和QCQP(线性规划,Linear Programming; 二次规划,Quadratic Programming;二次约束二次规划)
  2. 画论48 高濂《燕闲清赏笺·论画》
  3. BUUCTF·[NCTF2019]babyRSA·wp
  4. IIS配置WCF服务
  5. java tessbaseapi_图片识别 谷歌TessBaseAPI使用
  6. 小程序服务器内存要求,小程序服务器内存需要多大
  7. WIN7显示中文繁体的解决方法
  8. 使用模拟器出现系统开启Hyper-v导致不能运行,Win10如何禁用 Hyper-V
  9. 【Windows】windows10时间显示秒数
  10. windows 关闭不需要的端口