前言

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

代码

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>bool mouse_down = false, mouse_up = false;
cv::Point corner1, corner2;
cv::Rect rect;
cv::Mat src;static void mouseCallback(int event, int x, int y, int, void*)
{cv::Mat bg_model, fg_model, mask;if (event == cv::EVENT_LBUTTONDOWN){mouse_down = true;corner1.x = x;corner1.y = y;}if (event == cv::EVENT_LBUTTONUP){if (abs(x - corner1.x) > 10 && abs(y - corner1.y) > 10){mouse_up = true;mouse_down = false;corner2.x = x;corner2.y = y;}else{mouse_down = false;}}if (mouse_down == true && mouse_up == false){cv::Point pt;pt.x = x;pt.y = y;cv::Mat local_img = src.clone();rectangle(local_img, corner1, pt, cv::Scalar(0, 0, 255), 3);imshow("Cropping app", local_img);}if (mouse_down == false && mouse_up == true){rect.width = abs(corner1.x - corner2.x);rect.height = abs(corner1.y - corner2.y);rect.x = std::min(corner1.x, corner2.x);rect.y = std::min(corner1.y, corner2.y);grabCut(src, mask, rect, bg_model, fg_model, 5, cv::GC_INIT_WITH_RECT);compare(mask, cv::GC_PR_FGD, mask, cv::CMP_EQ);cv::namedWindow("crop",0);cv::Mat image_roi;image_roi.create(src.size(), src.type());image_roi.setTo(cv::Scalar(255, 255, 255));src.copyTo(image_roi, mask);cv::Mat crop(image_roi, rect);cv::imshow("crop", crop);mouse_down = false;mouse_up = false;}
}
int main()
{src = cv::imread("12.jpg");cv::namedWindow("cropping",0);cv::imshow("cropping", src);cv::setMouseCallback("cropping", mouseCallback);cvWaitKey(0);return 0;
}

OpenCV图像分割Grabcut算法相关推荐

  1. 图像分割—GrabCut算法

    文章目录 一.理论概述 二.OpenCV中grabCut算法函数: 一.理论概述 Grabcut是基于图割(graph cut)实现的图像分割算法,它需要用户输入一个bounding box作为分割目 ...

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

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

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

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

  4. opencv图像分割 --- Grabcut图像分割

    Grabcut图像分割与GMM.KMeans.分水岭分割的区别在于, Grabcut图像分割是用户可以 选择目标图像,然后将剩余的作为背景,目标作为前景进行分割,这样可以把目标提取出来,也就 是抠图: ...

  5. python opencv 利用 GrabCut 算法(opencv已经实现)从图像中分离出前景

    # 利用GrabCut算法从图像中分离出前景 import numpy as np import cv2 as cv from matplotlib import pyplot as pltimg = ...

  6. Opencv 关于Grabcut算法

    一.Grabcut原理的讲解 附上大佬的讲解,个人觉得不错 https://www.cnblogs.com/zyly/p/9392881.html https://blog.csdn.net/zoux ...

  7. opencv 图像分割-分水岭算法

    任何灰度图都恶意被看作是一个地形面,高强度表示山峰和山丘,低强度则表示山谷.开始使用不同的水来填充每个孤立的山谷(局部最小值).随着水的上升,来自不同山谷的水,开始融合.为了避免这种情况,在水合并的地 ...

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

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

  9. 抠图-grabCut算法+hog检测

    GrabCut是微软研究院的一个课题,主要功能是分割和抠图. grabcut是在graph cut基础上改进的一种图像分割算法,它同样是基于图割理论的. 由于背景的复杂度不同所以,grabcut算法抠 ...

最新文章

  1. Apache Kafka-通过concurrency实现并发消费
  2. 2020年终总结一下吧
  3. Hive mysql 内连接_Hive-表连接 | 学步园
  4. jQuery中的text()、html()和val()以及innerText、innerHTML和value
  5. Winform控件拖动
  6. stl vector 函数_vector :: pop_back()函数以及C ++ STL中的示例
  7. linux qt sql,linux qt联接sqlserver怎么配置服务器
  8. 有时间属性,有过程的是软件,有空间属性,有结构的是硬件
  9. Db4o for .NET 使用心得(1、2):Trace db4o;慎用struct
  10. 互联网靠什么赚钱和发展趋势
  11. 鼠标点击网页空白处出现手机号
  12. python 天勤 金叉 编程代码_GitHub - Oscar201106/tqsdk-python: 天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易...
  13. DJI的核心竞争力是什么?
  14. 蓝宝石RX590GME 8G D5白金版黑苹果免驱成功
  15. 爬取东方财富网的部分股票信息(2)
  16. 自媒体书单:从入门、写作、策划到运营自媒体必须收藏的系列好书
  17. ubuntu22.10使用显卡驱动nvidia-driver-525-testd报错
  18. 合理用药基础知识-普及篇
  19. 桌面计算机安全禁用账户,Win10电脑提示“你的账户已被停用,请向系统管理员咨询”的解决教程...
  20. STM32F103完成基于I2C协议的AHT20温湿度传感器数据采集

热门文章

  1. go 怎么等待所有的协程完成_GO语言基础进阶教程:Go语言的协程——Goroutine
  2. vs debug 模式生成的exe 另一台电脑_神秘的 _DEBUG 宏从何处来?
  3. Java NIO之缓冲区
  4. Android开发者珍藏必备【学习资料篇】
  5. 深入理解多线程(三)—— Java的对象头
  6. Java RESTful 框架的性能比较
  7. Java的类(class)、包(package)和接口(interface)
  8. Day 21:Docker 入门教程
  9. 数字图像处理:第三章 灰度直方图
  10. Spring Cloud的全局封装实践