OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()
1、convexHull()函数
计算出图像点集的凸包,根据图像的轮廓点,通过函数convexhull转化成凸包的点坐标,从而画出图像的凸包。
void convexHull(
InputArray points, // 输入的点集,一般是用图像轮廓函数求得的轮廓点
OutputArray hull, // 输出的是凸包的二维xy点的坐标值,针对每一个轮廓形成的。
bool clockwise = false, // 表示凸包的方向,true顺时针 flase 逆时针
bool returnPoints = true // true表示返回点,false返回点地址的索引值
==returnPoints 标识符==
当输出数组"hull" 是std::vector时,忽略该标志,输出取决于向量的类型:
std::vector<int>表示 returnPoints=false, 返回索引值
std::vector<Point>表示 returnPoints=true。返回点
)
2、boundingRect()函数
该函数计算并返回指定点集的最小右上界矩形。
Rect cv::boundingRect(InputArray points)
3、minAreaRect()函数
对给定的2D 点集,寻找可旋转的最小面积包围矩形
RotatedRect cv::minAreaRect(InputArray points)
4、minEnclosingCircle()函数
找到包围2D点集的最小面积的圆。
void cv::minEnclosingCircle(
InputArray points,
Point2f & center,
float & radius
)
5、minEnclosingTriangle()函数
找到一个包含2D点集的最小面积三角形,并返回其面积。
double cv::minEnclosingTriangle(
InputArray points,
OutputArray triangle
)
6、minEnclosingTriangle()函数
在一组二维点周围拟合一个椭圆。
RotatedRect cv::fitEllipse(
InputArray points
)
7、approxPolyDP()函数
以指定的精度近似生成多边形曲线。
函数逼近一条曲线或另一条曲线/顶点较少的多边形,使它们之间的距离小于或等于指定的精度。它使用Douglas-Peucker算法
void approxPolyDP(
InputArray curve, // 输入的点集(存储在std::vector或Mat中的二维点的输入向量)
OutputArray approxCurve, // 输出的点集,当前点集是能最小包容指定点集的。draw出来即是一个多边形;
double epsilon, // 指定的精度,也即是原始曲线与近似曲线之间的最大距离。
bool closed // 若为true,则说明近似曲线是闭合的,它的首位都是相连,反之,若为false,则断开。
);
8、示例一: (凸包)
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
// 1、初始化变量和随机值
Mat image(600, 600, CV_8UC3);
RNG& rng = theRNG()