27_OpenCV绘制椭圆

cv::ellipse和cv::circle函数非常相似,主要的区别在于axes参数。函数声明:

bool ellipse(
	cv::Mat& img,  // image rto be drawn on
	cv::Point center,  // location of ellipse center
	cv::Size axes, // length of major and minor axes
	double angle,  // tilt angle of major axis
	double startAngle,  // start angle for arc drawing
	double endAngle,  // End angle for arc drawing
	const cv::Scalar& color,  // Color,BGR form
	int thickness = 1,  // thickness of line
	int lineType = 8,  // connectedness,4 or 8
	int shift = 0  // bits if radius to treat as fraction
);
bool ellipse(
	cv::Mat& img,
	const cv::RotatedRect& rect,  // image to be drawn on
	const cv::Scalar& color,  // Color,BGR form
	int thickness = 1,  // thickness of line
	int lineType = 8,  // connectedness,4 or 8
	int shift = 0  // bits of radius to treat as fraction
);

第一种函数声明说明:
参数axes是cv::Size类型的值,其中height和width参数分别表示椭圆长轴和短轴的长度。
参数angle是主轴的角度(单位为度),计算方法是从水平方向(x轴正方向)开始逆时针旋转。
参数startAngle和endAngle表示了圆弧的起始和中止角度,如果要得到一个完整的椭圆,这两个值要分别设置为0和360。

第二种画椭圆的方式是使用一个边界框,使用cv::RotatedRect类型的边界框就同时指定了椭圆的大小和朝向。

此外还有一个函数cv::ellipse2Poly()是在cv::ellipse()函数内部使用的,用来计算椭圆弧,但是也可以单独调用。函数声明原型:

void ellipse2Poly(
	cv::Point center,
	cv::Size axes,  // length of major and minor axes
	double angle,  // tilt angle of major axis
	double startAngle,  // start angle for arc drawing
	double endAngle,  // end angle for arc drawing
	int delta,  // angle between sequential vertices
	vector<cv::Point>& pts  // result,STL-vector of points
);

给定一个椭圆弧参数,包括center,axes,angle,startAngle和endAngle,这些参数与cv::ellipse()中的定义相同,还有指定下一个采样点的角度delta参数。上面的参数设置后,cv::ellipse2Poly就可以计算出一系列的点,用以这些点作为顶点的多边形来近似指定的椭圆弧,计算的点使用vector<> pts返回。

使用示例:

	cv::Mat image(600, 800, CV_8UC3, cv::Scalar(0, 0, 0));
	cv::Point cenpt = cv::Point(150, 200);
	cv::Size siz = cv::Size(120, 80);
	double axes = 10;
	double startAngle = 60;
	double endAngle = 300;
	cv::ellipse(image, cenpt,siz, axes,startAngle,endAngle, CV_RGB(255, 0, 0),3);
	cenpt.x = 450;
	cenpt.y = 500;
	axes = 90;
	cv::RotatedRect rect(cenpt, siz, axes);
	cv::ellipse(image, rect, CV_RGB(0, 255, 0),3);
	cv::namedWindow("image");
	cv::imshow("image", image);
	cv::waitKey(0);

	std::vector<cv::Point> pts;
	int delta = 30;
	cv::ellipse2Poly(cenpt, siz, axes, startAngle, endAngle, delta, pts);
	for (auto it = pts.begin(); it != pts.end(); ++it){
		std::cout << "pt = " << it->x << "," << it->y << std::endl;
	}

	int nsize = pts.size();
	for (int i = 0; i < nsize - 1; i++){
		cv::line(image, pts.at(i), pts.at(i + 1), CV_RGB(0, 255, 255), 5);
	}
	cv::namedWindow("image");
	cv::imshow("image", image);
	cv::waitKey(0);

显示结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用OpenCV绘制图形可以通过调用不同的函数来实现。在Python中,可以使用cv2.line()来绘制线段,cv2.rectangle()来绘制矩形,cv2.circle()来绘制圆形,cv2.ellipse()来绘制椭圆,cv2.polylines()来绘制多边形,以及cv2.putText()来绘制文本。这些函数可以在计算机视觉任务和图像处理中非常有用。例如,可以使用cv2.circle()函数绘制圆形。 在OpenCV中,绘制图形的步骤通常包括创建一个画布,并在其上使用相应的函数绘制所需的图形。通过指定参数如颜色、线条宽度和填充等,可以对图形进行进一步的定制。例如,可以指定圆心坐标、半径和颜色来绘制一个圆形。 下面是一个示例代码,展示了如何使用OpenCV绘制图形: #include <opencv2/opencv.hpp> using namespace cv; int main() { // 载入图片 Mat srcImage = imread("dota.jpg", 1); Mat dstImage; // 转换颜色空间 cvtColor(srcImage, dstImage, COLOR_BGR2Lab); // 显示效果图 imshow("效果图", dstImage); waitKey(0); } 这个示例代码使用了cv2的imread()函数来载入一张图片,然后使用cvtColor()函数将图片转换为Lab颜色空间。最后,使用imshow()函数显示转换后的效果图。 希望这个回答能够帮助您了解如何使用OpenCV绘制图形。如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【CV 向】OpenCV 图形绘制指南](https://blog.csdn.net/qq_21484461/article/details/131333236)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [OpenCV—学习基本绘图](https://blog.csdn.net/qq_44859533/article/details/125160651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值