OpenCV3.0 Examples学习笔记(2)-convexhull.cpp
来源:互联网 发布:java启动exe程序 cmd 编辑:程序博客网 时间:2024/06/07 03:19
这个系列的目的是通过对OpenCV示例,进一步了解OpenCV函数的使用,不涉及具体原理。
本文记录了对OpenCV示例convexhull.cpp的分析。
资料地址:http://docs.opencv.org/3.0.0/d0/d7a/convexhull_8cpp-example.html
Example源码:
#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include <fstream>#include <iostream>using namespace cv;using namespace std;static void help(){ cout << "\nThis sample program demonstrates the use of the convexHull() function\n" << "Call:\n" << "./convexhull\n" << endl;}int main( int /*argc*/, char** /*argv*/ ){ Mat img(500, 500, CV_8UC3); RNG& rng = theRNG(); help(); for(;;) { char key; int i, count = (unsigned)rng%100 + 1; vector<Point> points; for( i = 0; i < count; i++ ) { Point pt; pt.x = rng.uniform(img.cols/4, img.cols*3/4); pt.y = rng.uniform(img.rows/4, img.rows*3/4); points.push_back(pt); } vector<int> hull; convexHull(Mat(points), hull, true); img = Scalar::all(0); for( i = 0; i < count; i++ ) circle(img, points[i], 3, Scalar(0, 0, 255), FILLED, LINE_AA); int hullcount = (int)hull.size(); Point pt0 = points[hull[hullcount-1]]; for( i = 0; i < hullcount; i++ ) { Point pt = points[hull[i]]; line(img, pt0, pt, Scalar(0, 255, 0), 1,LINE_AA); pt0 = pt; } imshow("hull", img); key = (char)waitKey(); if( key == 27 || key == 'q' || key == 'Q' ) // 'ESC' break; } return 0;}
Example运行截图
1
2
3
Example分析
这个例子说明函数 convexHull的使用。
convexHull用于计算凸包,凸包在很多地方有着重要的作用,如手势识别,需要识别出手的轮廓的凸包,二维或者三维区域的边界等等。
convexHull
函数原型:
void convexHull(InputArray points, OutputArray hull, bool clockwise=false, bool returnPoints=true);
参数说明:
InputArray points: 要求凸包的点集;OutputArray hull: 输出的凸包点;
bool clockwise: bool变量,表示求得的凸包是顺时针方向还是逆时针方向,true是顺时针方向,false为逆时针方向
PS:对于OutputArray hull参数可以为std::vector<int>,这是返回的是凸包点在原轮廓点集中的索引,当为std::vector<cv::Point>时,表示的是凸包点的位置参考资料:
1.《opencv中convexHull函数说明》
2.《二维凸包convex hull之C++及OpenCV实现》
3. http://www.csie.ntnu.edu.tw/~u91029/ConvexHull.html
1 0
- OpenCV3.0 Examples学习笔记(2)-convexhull.cpp
- OpenCV3.0 Examples学习笔记(3)-cout_mat.cpp
- OpenCV3.0 Examples学习笔记(4)-demhist.cpp
- OpenCV3.0 Examples学习笔记(5)-distrans.cpp
- OpenCV3.0 Examples学习笔记(6)-edge.cpp
- OpenCV3.0 Examples学习笔记(7)-ffilldemo.cpp
- OpenCV3.0 Examples学习笔记(8)-filestorage.cpp
- OpenCV3.0 Examples学习笔记(1)-contours2.cpp-通过findContours 函数实现轮廓提取
- OpenCV3.0 Examples学习笔记(9)-fitellipse.cpp-fitEllipse函数实现椭圆拟合
- OpenCV3.0 Examples学习笔记(11)-houghcircles.cpp-houghcircles函数实现圆形检测
- OpenCV3.0 Examples学习笔记(12)-houghlines.cpp-通过HoughLinesP函数实现直线检测
- OpenCV3.0 Examples学习笔记(15)-lsd_lines.cpp-LSD直线检测
- OpenCV3.0 Examples学习笔记(18)-pca.cpp-PCA类实现降维处理
- OpenCV3.0 Examples学习笔记(10)-grabcut.cpp-grabcut函数实现人机交互高效分割图像前景背景
- OpenCV3.0 Examples学习笔记(13)-kmeans.cpp-kmeans函数实现对图像位置进行聚类
- OpenCV3.0 Examples学习笔记(14)-laplace.cpp-LaplaLacian实现对摄像头预览图边缘检测
- OpenCV3.0 Examples学习笔记(16)-minarea.cpp-minAreaRect,minEnclosingTriangle,minEnclosingCircle获取点集外接形状
- OpenCV3.0 Examples学习笔记(17)-morphology2.cpp-erode,dilate,morphologyEx函数实现数学形态学变换
- C++ vector
- linux iptable安装配置
- FCC中级算法(三)
- 基于梯度的学习
- 学生成绩处理程序
- OpenCV3.0 Examples学习笔记(2)-convexhull.cpp
- linux 运行脚本时报错:语法错误: 未预期的文件结尾
- 骆驼命名法,匈牙利命名法和帕斯卡命名法
- UIWebView加载富文本处理图片宽度过大问题
- iOS开发之性能调试Instruments(二)
- 每天一个linux命令(16):which命令
- 程序设计实训项目一 小学生考试系统
- web前端开发培训和自学 哪种选择更适合你
- HPUoj问题 J: KACA的围棋入门(DFS)