根据课上讲的

Image

cv::Point2f recursive_bezier(const std::vector<cv::Point2f> &control_points, float t) 
{
    if (control_points.size() == 2)
    {
        return (1 - t) * control_points[0] + t * control_points[1];
    }

    std::vector<cv::Point2f> new_control_points;

    for (int i = 0; i < control_points.size() - 1; i++)
    {
        new_control_points.push_back((1 - t) * control_points[i] + t * control_points[i+1]);
    }
    
    return recursive_bezier(new_control_points, t);

}

void bezier(const std::vector<cv::Point2f> &control_points, cv::Mat &window) 
{
    for (float t = 0; t <= 1; t += 0.001)
    {
        auto point = recursive_bezier(control_points, t);
        window.at<cv::Vec3b>(point.y, point.x)[1] = 255;
    }
}

Image