OpenCV绘图函数(6)绘制椭圆函数ellipse()的使用

  • 操作系统: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;
}

运行结果

相关推荐
minhuan24 分钟前
构建AI智能体:六十六、智能的边界:通过偏差-方差理论理解大模型的能力与局限
人工智能·方差·偏差·方差-偏差分解·方差-偏差权衡·模型调优
润 下29 分钟前
C语言——深入解析C语言指针:从基础到实践从入门到精通(四)
c语言·开发语言·人工智能·经验分享·笔记·程序人生·其他
koo36432 分钟前
李宏毅机器学习笔记25
人工智能·笔记·机器学习
余俊晖34 分钟前
如何让多模态大模型学会“自动思考”-R-4B训练框架核心设计与训练方法
人工智能·算法·机器学习
hzp66635 分钟前
Magnus:面向大规模机器学习工作负载的综合数据管理方法
人工智能·深度学习·机器学习·大模型·llm·数据湖·大数据存储
hui梦呓の豚39 分钟前
YOLO系列目标检测算法全面解析
人工智能·计算机视觉·目标跟踪
一水鉴天1 小时前
整体设计 逻辑系统程序 之27 拼语言整体设计 9 套程序架构优化与核心组件(CNN 改造框架 / Slave/Supervisor/ 数学工具)协同设计
人工智能·算法
Y_Chime1 小时前
从AAAI2025中挑选出对目标检测有帮助的文献——第二期
人工智能·目标检测·计算机视觉
佛喜酱的AI实践1 小时前
Claude Code配置指南已死,这个一键安装工具才是未来
人工智能·claude
还是大剑师兰特1 小时前
Transformer 面试题及详细答案120道(91-100)-- 理论与扩展
人工智能·深度学习·transformer·大剑师