欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenCVSharp 笔记3 绘制直线、圆、椭圆、矩形、多边形、文本

程序员文章站 2022-03-31 19:44:02
...

代码如下:

        static void Main(string[] args)
        {
            Mat src = new Mat("lenna.png", ImreadModes.AnyColor | ImreadModes.AnyDepth);

            Point pt1 = new Point(100,100);
            Point pt2 = new Point(300, 300);
            Scalar scalar = new Scalar(0,255,0);
            Cv2.Line(src, pt1, pt2, scalar, 1, LineTypes.AntiAlias,0);//画线 参数1:操作图像 2:直线起点  3:直线终点 4:颜色 5:线宽  6:线型  7:缩放参数(0为不缩放)

            Cv2.Rectangle(src, pt1, pt2,scalar, 5, LineTypes.AntiAlias, 0);//绘制矩形 参数1:操作图像 2:矩形左上点 3:矩形右下点 4:颜色 5:线宽  6:线型  7:缩放参数(0为不缩放)

            pt1 = new Point(200, 200);
            scalar = new Scalar(0, 100, 0);
            Cv2.Circle(src, pt1, 100,scalar, 3, LineTypes.AntiAlias, 0);//绘制园 参数1:操作图像 2:圆心 3:半径 4:颜色 5:线宽  6:线型  7:缩放参数(0为不缩放)

            Size size = new Size(80,50);
            scalar = new Scalar(0, 100, 100);
            Cv2.Ellipse(src, pt1, size,180,90,270, scalar,-1, LineTypes.AntiAlias, 0);//绘制椭圆 参数1:操作图像 2:椭圆中心 3:以椭圆长轴和短轴长度为边界的矩形区域,椭圆就绘制在这个矩形区域 4:椭圆旋转角度 5:起始角度  6:终止角度  7:颜色 8:线宽 9:线型 10:缩放参数(0为不缩放)

            List<Point> pts1 = new List<Point>
            {
                new Point(400,400),
                new Point(400,500),
                new Point(500,500),
                new Point(500,400),
                new Point(400,400)
            };
            List<Point> pts2 = new List<Point>
            {
                new Point(10,10),
                new Point(10,150),
                new Point(150,150),
                new Point(150,10),
                new Point(10,10)
            };
            List<List<Point>> pts = new List<List<Point>>() { pts1, pts2 }; //包含几个矩阵,就绘制几个多边形
            Scalar color = new Scalar(0, 100, 33);
            //Cv2.FillPoly(src, pp, color, LineTypes.Link8, 0, new Point(0, 0));
            Cv2.Polylines(src, pts, false, scalar, 3, LineTypes.AntiAlias, 0);//绘制多边形 

            Cv2.PutText(src,"Opencv", new Point(0, 100),HersheyFonts.Italic,3, color,1,LineTypes.AntiAlias,false);//绘制文本

            Cv2.ImShow("src image", src);
            Cv2.WaitKey();
        }

线宽:-1时代表填充区域
shift:shift是用来做图像缩小的,会把中心点坐标以及线的长度按比例缩小,假设原来的数字为D,变换后的数字为d,则具体公式是:
d = D/(2^shift);