approxPolyDP(contours, Curve, epsilon, true);

 InputArray contours:输入的点集;
OutputArray Curve:输出的点集,当前点集是能最小包容指定点集的。画出来即是一个多边形;
double epsilon:指定的精度,也即是原始曲线与近似曲线之间的最大距离;
bool closed:若为true,则说明近似曲线是闭合的,反之,若为false,则断开。

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

void main()
{
    Mat img = imread("E:/1.jpg",0);
    imshow("img", img);
    Mat img_out(img.size(), CV_8UC3, Scalar::all(0));//纯黑图像
    threshold(img, img, 200, 255,THRESH_OTSU );
    vector<vector<Point>> contours;
    vector<Vec4i> hierarcy;
    findContours(img, contours, hierarcy, 0, CHAIN_APPROX_NONE);
    vector<vector<Point>> contours_poly(contours.size());//用于存放折线点集
    for (int i = 0; i < contours.size(); i++)
    {
        approxPolyDP(Mat(contours[i]), contours_poly[i],2, true);

        drawContours(img_out, contours_poly, i, Scalar(0, 255, 255), 2, 8);  //绘制
    }
    imshow("approx", img_out);
    waitKey(0);
}