opencv ellipse函数_13、OpenCV绘图和文本显示

 2023-09-16 阅读 30 评论 0

摘要:我们经常想要绘制各种形状,为此,OpenCV提供了一系列功能,可以绘制直线,矩形,圆等。OpenCV的绘图功能适用于图像,但其中大多数仅影响前三个通道,在单通道图像的情况下仅默认第一个通道。大多数绘图支持颜色,厚度

我们经常想要绘制各种形状,为此,OpenCV提供了一系列功能,可以绘制直线,矩形,圆等。OpenCV的绘图功能适用于图像,但其中大多数仅影响前三个通道,在单通道图像的情况下仅默认第一个通道。大多数绘图支持颜色,厚度,线条类型的修改。

当指定颜色时,使用Scalar对象,大部分只使用前三个值。有时可以使用Scalar中的第四个值来表示alpha通道,但绘图函数目前不支持alpha混合。另外, OpenCV使用BGR转换多通道图像以进行颜色渲染。

绘制功能的厚度和线型参数两者都是整数,但后者唯一可接受的值是4,8或 LINE_AA等。厚度是以像素为单位粗细。对于圆形,矩形和所有其他闭合形状,厚度参数也可以设置为FILLED。在这种情况下,结果是绘制的图形将以与边缘相同的颜色填充。lineType参数指示行应该是“4连接”,“8连接”还是消除锯齿。

对于绘图算法,通常将端点(线),中心点(圆),角(矩形)等指定为整数。这些与像素对齐。在有可用移位的情况下,它为整数参数中的位数,将其视为小数位。例如,如果想要一个以(5,5)为中心的圆,半径设置为1,那么这个圆将被画成(2.5,2.5)。这种效果通常会非常微妙,并取决于所使用的线型。对于消除锯齿的线条效果最明显。表1是绘制函数

表1 绘制函数

函数名

说明

circle()

绘制圆

clipLine()

该函数用来判断点pt1和点pt2连接的直线是否在一个矩形范围内

ellipse()

绘制椭圆

ellipse2Poly()

跟ellipse()函数类似,指定采样点的角度参数后,会计算出一系列点,可以用这些点作为顶点的多边形来近似指定的椭圆弧

fillConvexPoly()

绘制一个填充的多边形

fillPoly()

绘制任意数量的填充的多边形,可以处理自交点

line()

绘制直线

rectangle()

绘制矩形

polyLines()

绘制多边形

circle()的第一个参数就是图像。接下来是中心,二维点和半径。其余参数是标准颜色,厚度,线型和移位。

clipLine()此函数用于确定由两个点pt1和pt2指定的线是否位于矩形边界内。

ellipse()函数与circle()函数非常相似,主要区别在于Size类型的axes参数。高度和宽度参数表示椭圆的长轴和短轴的长度。角度是从水平逆时针测量的长轴的角度,startAngle和endAngle指示开始和结束的角度。因此,对于完整的椭圆,必须分别将这些值设置为0和360。

指定椭圆的替代方法是使用边界框。在这种情况下,RotatedRect的参数框完全指定了椭圆的大小和方向。。

ellipse2Poly()函数由ellipse()在内部计算椭圆弧,但也可以自己调用它。给定有关椭圆弧(ellipse()中定义的椭圆弧参数(中心,轴,角度,startAngle和endAngle-all)和指定要采样的点之间角度的参数信息, ellipse2Poly ()计算一系列点,形成了指定的椭圆弧的多边形逼近。计算的点将返回到矢量<> pts中。

fillConvexPoly()函数如果传递给它的多边形具有自相交,则会出错它将无法正常工作.2 pts中的点被视为顺序,并且pts中的最后一点 第一点是隐含的(即,多边形被假定为关闭)。

fillPoly绘制任意数量的填充多边形。fillConvexPoly()不同,它可以处理具有自相交的多边形。

函数line()在图像中绘制一条从pt1到pt2的直线。线条会被图像边界自动裁剪

rectangle()函数在图像中绘制一个从pt1到pt2的矩形。

polyLines函数绘制任意数量的未填充多边形。它可以处理一般多边形,包括具有自交叉的多边形。

表2    两个文本绘图功能。

函数

说明

putText()

在图像中绘制指定的文本

getTextSize()

确定文本的宽度和高度

putText函数是OpenCV的文本绘制函数; 它只是将一些文本投射到图像上。除非bottomLeftOrigin标志为true,否则文本将在文本框的左上角以指示的颜色打印,在这种情况下,文本框的左下角位于原点。使用的字体由fontFace参数选择,该参数可以是表3中列出的任何一种。

表3   字体

FONT_HERSHEY_SIMPLEX

FONT_HERSHEY_PLAIN

FONT_HERSHEY_DUPLEX

FONT_HERSHEY_COMPLEX

FONT_HERSHEY_TRIPLEX

FONT_HERSHEY_COMPLEX_SMALL

FONT_HERSHEY_SCRIPT_SIMPLEX

FONT_HERSHEY_SCRIPT_COMPLEX

每种字体都有一个大小。当fontScale不是1.0时,在绘制文本之前,字体大小由该数字缩放。图1显示了每种字体的示例。

20de0752f2cbca0a0bcbb4e82a8ce4e9.png

#include"opencv2/highgui/highgui.hpp"

#include"opencv2/imgproc/imgproc.hpp"

#include"iostream"

usingnamespace cv;

usingnamespace std;

int main(intargc, char** argv)

{

    Mat src = imread("E:/绘制.jpg", 1);

    namedWindow("原图", 0);

    imshow("原图", src);

    circle(src, Point2d(100, 100), 100, Scalar(255, 0, 0), 3,4, 0);

    ellipse(src, Point2d(350, 100), Size(100, 50), 0, 0,360, Scalar(0, 255, 0), 3, 8, 0);

    line(src, Point2d(500, 50), Point2d(600, 100), Scalar(0, 0, 255), 3,4, 0);

    rectangle(src, Rect(100, 300, 100,80), Scalar(255, 255, 0), 3, 4, 0);

    Point p[2][3] = { { Point(300, 400), Point(400, 380), Point(450, 260) },

    { Point(420, 540), Point(540, 300), Point(570,530) } };

    constPoint *pp[] = { p[0], p[1] };

    int n[] = { 4, 4 };

    polylines(src, pp,n,1,true, Scalar(0, 255, 255), 3,8, 0);

    fillPoly(src, pp, n, 1, Scalar(255, 255,0),4,0);

    bool isOk = clipLine(Rect(50, 50, 200,200), p[0][0], p[0][1]);

    vector<Point2i> pts;

    ellipse2Poly(Point(350, 250), Size(200, 150), 30,0, 200, 4, pts);

    Point Points[5] = { { 520,550 },{578,550 },{ 540,440 },{ 532,432 },{ 500,530 } };

    fillConvexPoly(src,Points, 5, Scalar(255, 0, 255));

    putText(src, "OpenCV Draw Graphics And Text",Point(100,100), FONT_HERSHEY_PLAIN, 1.0, Scalar(255, 255, 0));

    namedWindow("OpenCV绘制图形和文本演示", 0);

    imshow("OpenCV绘制图形和文本演示", src);

    waitKey(0);

    return 0;

}

855cf4a509a9db89581b70aa38f6b0f8.png

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/67641.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息