C++ opencv 截取任意形状封闭图形

漫水填充加模板实现截图。
**实现思路:**创建一个原图大小相同的单通道白色模板,在原图上通过鼠标圈出抠图区域,
并在模板上相同区域使用黑色线条画出对应区域,再将模板进行漫水填充,模板所选区域外全为黑色,区域内为白色。最后,使用copyTo()将模板上不为0的区域像素拷贝出来。

//FloodFill漫水函数原型
int floodFill(InputOutputArray image, InputOutputArray mask,Point seedPoint, Scalar newVal, Rect* rect=0,Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 );InputOutputArray:输入和输出图像。mask:            输入的掩码图像。seedPoint:      进行填充的起始点。 newVal:         图像中所有被算法选中的点,都用这个数值来填充。rect:            最小包围矩阵。loDiff:         最大的低亮度之间的差异。upDiff:         最大的高亮度之间的差异。flag:           选择算法连接方式。
//       copyTo函数
src.copyTo(dst, mask);
src拷贝原图,dst结果图,mask模板。
mask不存在时将src拷贝给dst,存在时将mask像素不为0的区域拷贝给dst。
Mat dst = src;浅复制,共享同一块内存;copyto深复制,各自拥有内存。
//初始化及回调函数的调用bool g_bDrawingBox = false;//记录鼠标左键是否按下Rect g_rectangle;           //画矩形所用rectPoint2i roi_p;//路径上的点    //画任意线条image_mask.create(roi_image1.rows, roi_image1.cols, CV_8U);image_mask.setTo(Scalar(255));setMouseCallback("裁剪图", mouse, (void*)&roi_image1);while (1){if (waitKey(10) == 27) { break; }//esc键,程序退出imshow("裁剪图", roi_image1);}//回调函数void mouse(int event, int x, int y, int flags, void* param) {Mat& image = *(Mat*)param;switch (event){case EVENT_LBUTTONDOWN: {cout << "EVENT_LBUTTONDOWN" << endl;g_bDrawingBox = true;g_rectangle = Rect(x, y, 0, 0);roi_p.x = x;roi_p.y = y;}break;case EVENT_MOUSEMOVE: {if (g_bDrawingBox) {g_rectangle.width = x - g_rectangle.x;g_rectangle.height = y - g_rectangle.y;line(image, roi_p, Point2i(x,y), Scalar(0, 0, 255), 1, CV_AA);line(image_mask, roi_p, Point2i(x, y), Scalar(0), 3, 8);roi_p.x = x;roi_p.y = y;}}break;case EVENT_LBUTTONUP: {// 可以将起点和终点的矩形画出来cout << "EVENT_LBUTTONUP" << endl;g_bDrawingBox = false;if (g_rectangle.width < 0) {g_rectangle.x += g_rectangle.width;g_rectangle.width *= -1;}if (g_rectangle.height < 0) {g_rectangle.y += g_rectangle.height;g_rectangle.height *= -1;}rectangle(image, g_rectangle, Scalar(0, 0, 255));}break;case EVENT_RBUTTONUP: {floodFill(image_mask, Point(100, 100), Scalar(0, 0, 0));//漫水填充image.copyTo(dst, image_mask);//抠图}}
}

C++ opencv 截取任意形状封闭图形相关推荐

  1. windows自带的比微信好用的截图工具:截取任意形状图片,标尺画直线,窗口图精准截取

    快捷键 win+shift+s 可以调用 windows 自带的截图工具. 这个工具最主要有三个优点: ① 就是可以截取任意形状. ② 编辑时,可以借助标尺画很直的线. ③ 窗口完美包裹截图,强迫症的 ...

  2. 新版QQ功能录制屏幕、截取任意形状、屏幕文字识别

    是不是觉得QQ PC版最近的更新都是在网课功能上了呢?对的,腾讯为了同学们可以更好地上网课真是操碎了心.不过QQ最近推出了9.3.2版,这一次的更新可是跟网课无关,此次更新带给用户几个非常好用的新功能 ...

  3. opencv实现任意形状的内切圆

    参考任意多边形的最大内切圆算法_海风吹来的石头的博客-CSDN博客_c++ 最大内切圆 前言 利用opencv的distanceTransform函数实现内切圆,对于稍微大一点的图像,耗时很严重,所以 ...

  4. 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例

    Python Opencv检测并绘制框图 opencv 进行任意形状目标识别,供大家参考,具体内容如下 工作中有一次需要在简单的图上进行目标识别,目标的形状不固定,并且存在一定程度上的噪声影响,但是噪 ...

  5. 绘制简单封闭图形并且进行填充

    思路:绘制封闭曲线,获得轮廓, 对轮廓进行填充 因为在绘制曲线的时候,记录了起始点和最后一个点的坐标,用以使曲线封闭,所以绘制的时候只需要绘制到起点的附近区域即可,松开鼠标后,曲线连接起点和终点,实现 ...

  6. python使用opencv将tif裁剪为任意形状

    python使用opencv将tif裁剪为任意形状 前言 一.opencv是什么? 二.使用步骤 1.安装依赖 2.裁剪 总结 前言 博主最近在研究如何将tif裁剪成需要的任意形状,博主考虑过gdal ...

  7. VISIO 2010,不规则封闭图形填充方法

    转自:http://blog.chinaunix.net/uid-11829250-id-3476687.html 使用VISIO(2010)时,对规则的封闭图形填充非常简单,但是要想画一个不规则的图 ...

  8. ICCV 2019 Oral 端到端任意形状场景文字识别

    点击我爱计算机视觉标星,更快获取CVML新技术 本文简要介绍来自谷歌近期的一篇论文"Towards Unconstrained End-to-End Text Spotting", ...

  9. opencv之基本形状识别

    文章目录 opencv之基本形状识别 各种博客上的现有方法 新方法--从信号的角度分析 实验结果 通过上面这些图可以得到图下结论: 附代码 opencv之基本形状识别 各种博客上的现有方法 https ...

最新文章

  1. 小米数据管理与应用实践
  2. CVPR 2021 | 国防科大:基于几何稳定性分析的物体位姿估计方法
  3. Java 性能优化之 String 篇
  4. python 清空所有对象_Python编程思想(7):列表的增删改操作
  5. Swift入门篇-循环语句
  6. RE:SB的SDOISB记
  7. WebKit中的Chrome和ChromeClient
  8. 极光:2021年移动互联网母婴亲子行业研究报告
  9. C++新特性探究(十五):bind
  10. 中年码农,最后的倔强!
  11. 多目标优化算法_阿里提出多目标优化全新算法框架,同时提升电商GMV和CTR
  12. vc++ 6.0 三次bezier曲线绘制_Python matplotlib绘制散点图
  13. Linux网络编程:libnet 移植及使用
  14. 软素质面试题分享以及一些面试技巧和面试礼仪
  15. php绘制的图像是什么格式,图片一般是什么格式
  16. dhcp服务器 无线桥接,老款TP-Link TL-WR841N路由器无线桥接设置方法
  17. 根据表达式序列(前缀、中缀、后缀)构建表达式树
  18. educoder 2-2Python 计算思维训练——循环与列表(二)
  19. 【33】解读TPU:设计和拆解一块ASIC芯片
  20. POJ 3255(迪杰斯特拉算法求次短路)

热门文章

  1. python找电影资源_Python爬虫爬取BT之家找电影资源
  2. python矩阵的切片操作
  3. Youtube API数据类型
  4. 大数据学习路线(完整详细版,含整套教程)
  5. 字体编辑器BMFont
  6. JavaScript选择器的使用说明
  7. 工具箱 matlab,最全的Matlab工具箱分享
  8. 普通人在互联网上还有哪些赚钱的机会?
  9. 约克大学计算机语言班,约克大学语言班
  10. Oracle删除非空表空间