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;
}

运行结果

相关推荐
冬奇Lab1 分钟前
一天一个开源项目(第85篇):TypeScript 巫师把自己的 Claude 配置推到了 GitHub,一夜全球第一
人工智能·开源·claude
爱艺江河3 分钟前
智慧合规的HarmonyOS原生实践:与OpenClaw适配的项目方案浅析
人工智能·华为·harmonyos
xiaoduo AI6 分钟前
客服机器人用知识图谱推理吗?Agent功能介绍+关联问答,跨品类问题能推导?
人工智能·机器人·知识图谱
Data-Miner8 分钟前
数以轻舟聚焦Excel-Agent场景:当AI做表工具学会说人话
人工智能·excel
甲维斯10 分钟前
完了!我要背弃Opus4.7叛逃到GPT5.5+Codex了
人工智能·ai编程
夏沫の梦22 分钟前
生图新王GPT-image-2已用!附使用教程+生成案例
人工智能
AI木马人37 分钟前
13.【多租户架构实战】如何让一个AI系统同时服务多个用户且数据完全隔离?(完整设计方案)
人工智能·架构
sjsjsbbsbsn41 分钟前
大模型核心知识总结
java·人工智能·后端
qq_411262421 小时前
四博 AI 双目智能音箱方案:把“会说话的音箱”升级成“会表达、会感知、会控制”的 AI 终端
人工智能·智能音箱
努力努力再努力FFF2 小时前
跨境电商运营想用AI优化广告和选品,该从哪里开始学?
人工智能