IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> opencv 求凸包convexHull()函数解析 -> 正文阅读

[人工智能]opencv 求凸包convexHull()函数解析

一、概念

引自百度:凸包(Convex Hull)是一个计算几何(图形学)中的概念。
在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,…Xn)的凸组合来构造.
在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。
用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。

二、opencv convexHull()函数

1.函数原型

CV_EXPORTS_W void convexHull( InputArray points, OutputArray hull,
                              bool clockwise = false, bool returnPoints = true );

2.参数说明

InputArray:输入的2D点集,可以存储在std::vector或Mat中;
OutputArray:输出凸包。它是存储索引的整数vector,或者是存储点的整数vector。在第一种情况下,凸包元素是原始数组中凸包点的基于0的索引(因为凸包点集是原始点集的子集)。在第二种情况下,凸包元素是凸包点本身。
clockwise:顺时针方向标志。如果它是真的,输出凸包是顺时针方向的。否则,它是逆时针方向的。假设的坐标系的X轴指向右边,Y轴指向上方。
returnPoints:返回点的操作标志。对于矩阵,当标志为真时,函数返回凸包点。否则,它返回凸包点的索引。当输出数组为std::vector时,该标志被忽略,并且输出依赖于vector的类型:std::vector意味着returnPoints=false, std::vector意味着returnPoints=true。

三、代码示例

 vvoid test_convexHull()
 {
     cv::Mat src;
     src = cv::imread("D:\\QtProject\\Opencv_Example\\convexHull\\convexHull.png", cv::IMREAD_GRAYSCALE);
     if (src.empty()) {
         cout << "Cannot load image" << endl;
         return;
     }
     cv::imshow("src", src);
     
     cv::Mat binary;
     cv::threshold(src, binary, 50, 255, cv::THRESH_BINARY_INV);

     cv::Mat k55 = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(23, 23), cv::Point(-1, -1));
     cv::morphologyEx(binary, binary, cv::MORPH_CLOSE, k55, cv::Point(-1, -1), 3);


     cv::namedWindow("binary",cv::WINDOW_NORMAL);
     cv::imshow("binary", binary);


     std::vector<std::vector<cv::Point> > defectContours;
     std::vector<cv::Vec4i> hierarchyDefect;
     cv::findContours(binary, defectContours, hierarchyDefect, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);

     cv::Mat contours = cv::Mat(src.size(), CV_8UC3, cv::Scalar(0,0,0));

     std::vector<std::vector<cv::Point> > hull(defectContours.size());
     for (int i = 0; i < defectContours.size(); i++)
     {
         cv::convexHull(cv::Mat(defectContours[i]), hull[i], false);
     }

     cv::Mat canvas;
     contours.copyTo(canvas);
     for (int i = 0; i < hull.size(); i++)
     {
         cv::drawContours(contours, defectContours, i, cv::Scalar(255,255,255), 1);
         cv::drawContours(contours, hull, i, cv::Scalar(255,255,0), 1);
     }

     cv::namedWindow("contours",cv::WINDOW_NORMAL);
     cv::imshow("contours", contours);

 }

四、效果

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:33:38  更:2022-03-04 15:33:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:36:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码