opencv —— convexHull 寻找并绘制凸包
2024-09-02 01:32:21
凸包的定义:
包含点集 S 所有点的最小凸多边形称为凸包。
凸包绘制原理:Graham 扫描法
- 首先选择 y 方向上最低的点作为起始点 p0。
- 然后以 p0 为原点,建立极坐标系,做逆时针极坐标扫描,依次添加凸包点 p1,p2 ...pn(排序顺序根据极坐标角度大小)
- 若当前扫描点与下一个点构成的直线为逆时针转向,且转角 > 180°,则将该点添加到凸包点集合,否则忽略。
寻找凸包:convexHull 函数
void convexHull(InputArray points, OutputArray hull, bool clockwise = false, bool returnPoints = true);
- points,输入的二维点集,可以填 Mat 类型或者 vector。
- hull,输出参数,函数调用后找到的凸包。
- clockwise,操作方向标识符。当此标识符为 true 时,输出凸包为顺时针方向,否则为逆时针方向,默认为 false。并且假设坐标系的 x 轴指右,y 轴指上。
- returnPoints,当标志为真时,函数返回各凸包的各个点。否则返回凸包各点的指数。
代码示例:
#include<opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(){
Mat src = imread("C:/Users/齐明洋/Desktop/1.jpg");
imshow("src", src);
Mat gray, bin_img;
cvtColor(src, gray, COLOR_BGR2GRAY);
medianBlur(gray, gray, );//中值滤波,去除椒盐噪声
imshow("gray", gray); //获得二值图像,canny 和 threshold 两种方法都可以
//Canny(gray, bin_img, 20, 40, 3);
threshold(gray, bin_img, , , THRESH_BINARY);
imshow("bin_img", bin_img); //获取轮廓
vector<vector<Point> >contours;
findContours(bin_img, contours, RETR_TREE, CHAIN_APPROX_NONE); //获取凸包
vector<vector<Point> >hull(contours.size());
Mat dst = Mat(src.size(), src.type());
for (int i = ; i < contours.size(); i++) {
convexHull(contours[i], hull[i]);
drawContours(dst, hull, i, Scalar(, , ), );
} imshow("dst", dst);
waitKey();
}
效果演示:
借鉴博客:https://blog.csdn.net/just_tree/article/details/89296985
最新文章
- 旧版本APP被开发人员下架,新版本重新上传依然显示被下架
- jQuery插件库代码分享 - 进阶者系列 - 学习者系列文章
- 移动apache访问日志后如何立即生效
- Sum All Primes
- NPOI2.0学习(一)
- CLR via C#(09)-扩展方法
- zookeeper源码分析(一) 工作原理
- Struts2请求参数校验
- 随机数生成器console
- Cheap CK100 1024 tokens NXP FIX Chip on Eobd2
- IOS Xmpp 创建固定房间
- 基于visual Studio2013解决算法导论之028散列表开放寻址
- EEPlat的元数据驱动的运行引擎
- Activemq 宕机解决方案
- [[NSBundle mainBundle] pathForResource:fileName ofType:]获取文件路径不成功
- 洛谷P3268 [JLOI2016]圆的异或并(扫描线)
- OpenMP并行程序设计——for循环并行化详解
- Facebook 50%用户是虚假账号?我觉得可以更高!
- 瀑布流之ajax
- CentOS 7.0 Firewall防火墙配置
热门文章
- 创建一个区域(Creating an Area) |使用区域 | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
- Docker(二) 镜像
- Maven: 每次更新Maven Project ,JAVA 版本都变为1.5
- springmvc html与jsp解析器
- 暑假第四周总结(HDFS编程实践,安装HBASE)
- Django自动化测试平台项目案例
- C++ STL IO流 与 Unicode (UTF-16 UTF-8) 的协同工作
- Serverless 的资源评估与成本探索
- 快速理解YOLO目标检测
- avtivity与view