1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| cv::Point2f recursive_bezier(const std::vector<cv::Point2f> &control_points, float t) { if (control_points.size() == 1) { return control_points[0]; } else { std::vector<cv::Point2f> points; for (int i = 0; i < control_points.size()-1; i++) { cv::Point2f p; p.x = (1-t) * control_points[i].x + t * control_points[i + 1].x; p.y = (1-t) * control_points[i].y + t * control_points[i + 1].y; points.push_back(p); } return recursive_bezier(points, t); } }
void bezier(const std::vector<cv::Point2f> &control_points, cv::Mat &window) { for (float t = 0; t <= 1; t += 0.0001) { //调用递归贝塞尔曲线计算函数,计算曲线上的点坐标 cv::Point2f point=recursive_bezier(control_points,t); window.at<cv::Vec3b>(point.y, point.x)[1] = 255; } }
|