OpenCvSharp 学习笔记7 --绘制图形和文字

一 绘制线条

API :Cv2.Line()

参数说明
img:源图像
pt1:第一个点
pt2:第二个点
color线条颜色
thickness:线条的厚度(粗细)
lineType:线条类型 (枚举值)
shift点坐标中的小数位数。[默认值为0]

代码:

private static Mat src;
static void Main(string[] args)
     {
           loadImage();
     }
 private static void loadImage()
        {
            using (src = new Mat(@"C:\Users\wang\Desktop\s1.jpg", ImreadModes.AnyColor | ImreadModes.AnyDepth))
            {
                DrawLine();
                using (new Window("SRC Image", WindowMode.AutoSize, src))
                {
                    Cv2.WaitKey(0);
                }
            }
        }
        /// <summary>
        /// 绘制线条
        /// </summary>
        private static void DrawLine()
        {
            Point p1 = new Point(20, 30);
            Point p2;
            p2.X = 300;
            p2.Y = 30;
            Scalar color = new Scalar(0, 0, 255);
            Cv2.Line(src, p1, p2, color, 10, LineTypes.Link8);
        }

在这里插入图片描述

二 :绘制矩形

API:Cv2.Rectangle()

参数说明
img:源图像
rect:举行对象
color线条颜色
thickness:线条的厚度(粗细)
lineType:线条类型 (枚举值)
shift点坐标中的小数位数。[默认值为0]

代码:

        /// <summary>
        /// 绘制矩形
        /// </summary>
        private static void DrawRectangle()
        {
            Rect rect = new Rect(100, 200, 100, 100);
            Scalar color = new Scalar(255, 0, 0);
            Cv2.Rectangle(src, rect, color, 2, LineTypes.AntiAlias);//LineTypes.AntiAlias:反锯齿效果
        }

在这里插入图片描述

三:绘制椭圆和圆

代码:

        /// <summary>
        /// 绘制椭圆
        /// </summary>
        private static void DrawEllipse()
        {
            /*
             * 参数:
             *      1:背景图片
             *      2:中心点  椭圆的长轴和短轴 (如果相等就是圆) 
             *      3,椭圆的旋转就角度
             *      4:起始角度
             *      5:结束角度
             *      6:颜色
             *      7:线条宽度 默认 1
             *      8:边界类型 默认 Link8
             *      9:中心坐标和坐标轴值的小数位数,默认0
             */
            Cv2.Ellipse(src, new Point(src.Cols / 2, src.Rows / 2), new Size(src.Rows / 2, src.Cols / 2),90, 0, 360, new Scalar(0, 255, 0), 3, LineTypes.Link8);
        }

在这里插入图片描述

        /// <summary>
        /// 绘制圆圈
        /// </summary>
        private static void DrawCricle()
        {   
            Scalar color = new Scalar(0, 127, 255);
            Point conter = new Point(src.Cols / 2, src.Rows / 2);
            Cv2.Ellipse(src, conter, new Size(src.Cols / 4, src.Cols / 4), 90, 0, 360, color, 2, LineTypes.Link8);
        }

在这里插入图片描述

四:绘制多变型

代码:

        /// <summary>
        /// 绘制多边形
        /// </summary>
        private static void DrawPolygon()
        {
            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>> pp = 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));
        }

在这里插入图片描述

五:随机生成线段

代码:

 private static void RandomDrawLine()
        {
            //Random r = new Random();
            RNG rng = new RNG(12345); //生成高斯随机数
            Point p1 = new Point();
            Point p2 = new Point();
            Mat m1 = new Mat(src.Size(), src.Type());
            for (int i = 0; i < 5000; i++)
            {

                p1.X = rng.Uniform(0, src.Cols);//生成正太分布随机数 // r.Next(0, src.Cols);
                p1.Y = rng.Uniform(0, src.Cols);// r.Next(0, src.Cols);
                p2.X = rng.Uniform(0, src.Cols);// r.Next(0, src.Cols);
                p2.Y = rng.Uniform(0, src.Cols); //r.Next(0, src.Cols);
                Scalar color = new Scalar(rng.Uniform(0, 255), rng.Uniform(0, 255), rng.Uniform(0, 255));//(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255));
                Cv2.Line(m1, p1, p2, color, 1);
                using (new Window("Random Line", WindowMode.AutoSize, m1))
                {
                    if (Cv2.WaitKey(50) > 0) //50毫秒画一条线段
                    {
                        break;
                    }
                }
            }
        }

在这里插入图片描述

六:绘制文字

代码:

 static void Main(string[] args)
        {
            loadImage();
        }

private static void loadImage()
        {
            using (src = new Mat(@"C:\Users\whx\Desktop\opcvImage\s1.jpg", ImreadModes.AnyColor | ImreadModes.AnyDepth))
            {
                Mat dst = new Mat(src.Size(),src.Type());
                src.CopyTo(dst);
                写字
                Cv2.PutText(src, "Hello,OpenCvSharp!", new Point(300,200), HersheyFonts.HersheySimplex, 1,Scalar.All(255),2,LineTypes.Link4);
                using (new Window("DST Image", WindowMode.Normal, dst))
                using (new Window("SRC Image", WindowMode.Normal, src))
                {
                    Cv2.WaitKey(0);
                }
            }
        }

在这里插入图片描述

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值