OpenCV轮廓vectorvector,vector,vector,vector

https://blog.csdn.net/Ahuuua/article/details/80593388

轮廓周围绘制矩形框

vector<vector<Point>>,vector<V e c 4 i>,vector<R e c t>,vector<R o t a t e d R e c t>

刚开始学OpenCV没多久遇到这些个东西不知道是什么,搞得很不舒服。

通过给轮廓绘制矩形框弄明白了这些东西。

vector<vector<Point>>:

vector容器里面放了一个vector容器,子容器里放点

vector<V e c 4 i>:放了4维int向量

vector<R e ct>: 像素width * height   from  位置(x*y)

vector<R o t a t e d R e c t>:如图三个成员

上述结果的代码如下:

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. using namespace cv;
  4. using namespace std;
  5. int main() {
  6. Mat src, gray_src, drawImg, bin_output;
  7. src = imread("F:/Temp_vs/pic/09.jpg");
  8. namedWindow("input", CV_WINDOW_AUTOSIZE);
  9. namedWindow("output", CV_WINDOW_AUTOSIZE);
  10. imshow("input", src);
  11. cvtColor(src, gray_src, CV_BGR2GRAY);
  12. blur(gray_src, gray_src, Size(10, 10), Point(-1, -1), BORDER_DEFAULT);
  13. //这些个类型
  14. vector<vector<Point>> contours;
  15. vector<Vec4i> hierarchy;
  16. threshold(gray_src, bin_output, 144, 255, 0); //二值化
  17. findContours(bin_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0)); //找轮廓
  18. //这些个类型
  19. vector<vector<Point>> contours_poly(contours.size());
  20. vector<Rect> poly_rects(contours.size());
  21. vector<RotatedRect> minRect(contours.size());
  22. //取点
  23. for (size_t i = 0; i < contours.size(); i++)
  24. {
  25. approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true); //减少轮廓点数
  26. poly_rects[i]=boundingRect(contours_poly[i]);//获取绘制矩形数据
  27. if (contours_poly[i].size() > 5) {
  28. minRect[i] = minAreaRect(contours_poly[i]);//获取绘制旋转矩形数据
  29. }
  30. }
  31. //开始绘制
  32. src.copyTo(drawImg);
  33. Point2f pst[4];//储存单个旋转矩形的四个点
  34. cout << "----------Point2f pst[4]------------" << endl;
  35. for (size_t i = 0; i < contours.size(); i++)
  36. {
  37. rectangle(drawImg, poly_rects[i], Scalar(255, 0, 0), 2, 8);//绘制矩形框
  38. minRect[i].points(pst);//用线段画矩形,将RotatedRect类型转化为四个点
  39. for (size_t u = 0; u < 4; u++)
  40. {
  41. line(drawImg, pst[u], pst[(u + 1) % 4], Scalar(0, 255, 0), 2, 8);
  42. cout << pst[u]; //显示pst的数据
  43. }
  44. cout << endl;
  45. Rect brect = minRect[i].boundingRect(); //返回包含旋转矩形的最小矩形
  46. rectangle(drawImg, brect,Scalar(0, 0, 255));
  47. }
  48. cout << endl;
  49. imshow("output", drawImg);
  50. cout << "----------vector<vector<Point>> contours_poly------------" << endl;
  51. for (size_t i = 0; i < contours_poly.size(); i++)
  52. {
  53. cout << "第" << i << "行:";
  54. for (size_t j = 0; j < contours_poly[i].size(); j++)
  55. {
  56. cout<<contours_poly[i][j];
  57. }
  58. cout << endl;
  59. }
  60. cout << endl;
  61. cout << "----------vector<Vec4i> hierarchy------------" << endl;
  62. for (size_t i = 0; i < hierarchy.size(); i++)
  63. {
  64. cout << hierarchy[i] << endl;
  65. }
  66. cout << endl;
  67. cout << "----------vector<Rect> poly_rects------------" << endl;
  68. for (size_t i = 0; i < poly_rects.size(); i++)
  69. {
  70. cout << poly_rects[i]<<endl;
  71. }
  72. cout << endl;
  73. cout << "---------vector<RotatedRect> minRect------------" << endl;
  74. for (size_t i = 0; i <minRect.size(); i++) //显示一下点minRect
  75. {
  76. cout <<"angle:"<< minRect[i].angle<<" center:"<< minRect[i].center<<" size:"<< minRect[i].size<<endl;
  77. }
  78. cout << endl;
  79. waitKey(0);
  80. return 0;
  81. }

转载于:https://www.cnblogs.com/fpzs/p/10526383.html

OpenCV轮廓vectorvector相关推荐

  1. Python,OpenCV轮廓属性、轮廓检测及绘制

    Python,OpenCV轮廓属性.轮廓检测及绘制 1. 效果图 2. 源码 2.1 轮廓属性 2.2 轮廓特征 参考 这篇博客将介绍OpenCV中的轮廓,轮廓的特征及属性(质心,面积,轮廓,近似轮廓 ...

  2. OpenCV-Python实战(11)——OpenCV轮廓检测相关应用

    OpenCV-Python实战(11)--OpenCV轮廓检测相关应用 0. 前言 1. 轮廓绘制 2. 轮廓筛选 3. 轮廓识别 4. 轮廓匹配 小结 系列链接 0. 前言 在计算机视觉领域,轮廓通 ...

  3. OpenCV-Python实战(10)——详解 OpenCV 轮廓检测

    OpenCV-Python实战(10)--详解 OpenCV 轮廓检测 0. 前言 1. 轮廓介绍 2. 轮廓检测 3. 轮廓压缩 4. 图像矩 4. 1 一些基于矩的对象特征 4.2 Hu 不变矩 ...

  4. 基于Python的OpenCV轮廓检测聚类

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 简介 OpenCV的"findContours" ...

  5. python opencv轮廓总结

    OpenCV中的轮廓 1.1什么是轮廓 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓在形状分析和物体的检测和识别中很有用. 为了准确,要使用二值化图像.需要进行阀 ...

  6. opencv轮廓及点在轮廓内判断

    查找轮廓 轮廓到底是什么?一个轮廓一般对应一系列的点,也就是图像中的一条曲线.表示的方法可能根据不同情况而有所不同.有多重方法可以表示曲线.在openCV中一般用序列来存储轮廓信息.序列中的每一个元素 ...

  7. python opencv轮廓提取_Python + Opencv2 实现轮廓提取,轮廓区域面积计算

    对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结束,还需对轮廓所勾勒的像素面积区域统计计算. 本篇文章的主要内容就是 ...

  8. c# opencv 轮廓检测_C#中OpenCVSharp实现轮廓检测

    OpenCv提供了函数 findContours()用于对物体轮廓进行检测,该函数实现算法是由S.suzuki K.Abe于1985年发表的.OpenCVSharp封装了这个函数,有2个参数(cont ...

  9. c# opencv 轮廓检测_基于OpenCV的区域分割、轮廓检测和阈值处理

    OpenCV是一个巨大的开源库,广泛用于计算机视觉,人工智能和图像处理领域.它在现实世界中的典型应用是人脸识别,物体检测,人类活动识别,物体跟踪等. 现在,假设我们只需要从整个输入帧中检测到一个对象. ...

  10. python opencv轮廓检测_OpenCV 轮廓检测的实现方法

    轮廓概述 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓在形状分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找轮廓之前,要进行阈值化处理或 ...

最新文章

  1. 5种方法提高你网站的登录体验
  2. Maven+struts2+spring4+hibernate4的环境搭建
  3. 给zuul网关添加过滤器
  4. sqlserver 数据库日志文件过大的问题
  5. oracle中的merge into用法解析
  6. 解密双十一小程序云背后毫秒级伸缩的Serverless计算平台:函数计算
  7. Q127:PBRT-V3,理解“体渲染”积分器的关键竟然是这张图
  8. shift and算法
  9. pg数据库创建触发器
  10. 关于吾爱(52)破解网注册时临时安全验证码以及填完信息没有确认或提交按钮的问题
  11. CentOS7常用工具包安装
  12. 行驶证核验-行驶证核验查询-行驶证核验接口-行驶证核验查询接口-行驶证核验api接口-行驶证核验api
  13. Wampserver 80端口被占用
  14. 服务器受美国保护网站,该网站服务器受美国保护
  15. 2020年度广东学法普法平台开始了
  16. Photoshop脚本开发环境
  17. linux版retroarch游戏,RetroArch下载
  18. 网页调用迅雷下载文件
  19. liunx关闭端口命令
  20. 理科生应该这样写情书

热门文章

  1. ssh与tcp wappers
  2. MPLS virtual private network PE-CE之间的路由协议(BGP)
  3. zabbix详解(十四)——zabbix钉钉报警实战
  4. 我要做 Android 之面笔试
  5. C# DataGridView 全选 反选
  6. Ajax动态滚动加载数据
  7. 凸包+旋转卡壳模板——kuangbin版
  8. TABLE与DIV的取舍
  9. 百练 2965 玛雅历 解题报告
  10. 形容人的内核是什么意思_那些对你忽冷忽热的人到底什么意思?