- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
画出一个简单的或粗的椭圆弧或者填充一个椭圆扇形。
函数 cv::ellipse 使用更多的参数可以画出椭圆轮廓、填充的椭圆、椭圆弧或填充的椭圆扇形。绘图代码使用一般参数形式。使用分段线性曲线来近似椭圆弧边界。如果你需要对椭圆渲染有更多的控制,你可以使用 ellipse2Poly 获取曲线,然后使用 polylines 进行绘制或使用 fillPoly 进行填充。如果你使用函数的第一个变体并且想要画出整个椭圆而不是弧线,传递 startAngle=0 和 endAngle=360。如果 startAngle 大于 endAngle,它们会被交换。下面的图解释了用于绘制蓝色弧线的参数含义。
椭圆弧的参数
函数原型1
cpp
void cv::ellipse
(
InputOutputArray img,
Point center,
Size axes,
double angle,
double startAngle,
double endAngle,
const Scalar & color,
int thickness = 1,
int lineType = LINE_8,
int shift = 0
)
参数1
- 参数img 图像.
- 参数center 椭圆的中心。
- 参数axes 椭圆主轴的一半长度。
- 参数angle 椭圆旋转角度(度)。
- 参数startAngle 椭圆弧的起始角度(度)。
- 参数endAngle 椭圆弧的结束角度(度)。
- 参数color 椭圆的颜色。
- 参数thickness 椭圆弧边线的厚度,如果为正数。否则,表示要绘制填充的椭圆扇形。
- 参数lineType 椭圆边界类型。参见LineTypes。
- 参数shift 中心坐标和轴值中的分数位数。
函数原型2
这是一个重载成员函数,提供方便之用。它与上述函数的不同之处仅在于它接受的参数
cpp
void cv::ellipse
(
InputOutputArray img,
const RotatedRect & box,
const Scalar & color,
int thickness = 1,
int lineType = LINE_8
)
参数2
- 参数img 图像.
- 参数box 通过RotatedRect表示的备选椭圆形式。这意味着函数将在旋转矩形内绘制一个内切椭圆。
- 参数color 椭圆的颜色。
- 参数thickness 椭圆轮廓的宽度,如果为正值,则表示线条的厚度;如果为负值,则表示要绘制填充的椭圆扇形。
- 参数lineType 椭圆边界类型。参见LineTypes。
代码示例
cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
// 创建一个空白图像
cv::Mat image = cv::Mat::zeros(400, 400, CV_8UC3);
// 设置椭圆的参数
cv::Point center(200, 200); // 椭圆中心
cv::Size axes(100, 50); // 椭圆的轴长
double angle = 0; // 椭圆旋转角度
double startAngle = 0; // 开始角度
double endAngle = 360; // 结束角度
cv::Scalar color(0, 0, 255); // 颜色 (BGR)
int thickness = 2; // 线条粗细
int line_type = cv::LINE_8; // 线条类型
// 绘制椭圆
cv::ellipse(image, center, axes, angle, startAngle, endAngle, color, thickness, line_type);
// 显示图像
cv::namedWindow("Ellipse Drawing", cv::WINDOW_NORMAL);
cv::imshow("Ellipse Drawing", image);
cv::waitKey(0);
return 0;
}