zoukankan      html  css  js  c++  java
  • Opencv Mat构造函数和绘图函数<4>

           Mat类的构造函数有20多种,详见https://docs.opencv.org/4.1.1/d3/d63/classcv_1_1Mat.html#af1d014cecd1510cdf580bf2ed7e5aafc;

           现列出几种常用构造函数以及方法:

           1.Mat(int rows,int cols ,int type);

            parameters:

    rows Number of rows in a 2D array.
    cols Number of columns in a 2D array.
    type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.

         2.Mat(Size size ,int type);

           Parameters :

    size 2D array size: Size(cols, rows) . In the Size() constructor, the number of rows and the number of columns go in the reverse order.
    type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.

         3. Mat(int rows,int cols ,int type,const Scalar & s);

           Parameters:

    rows Number of rows in a 2D array.
    cols Number of columns in a 2D array.
    type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.
    s An optional value to initialize each matrix element with. To set all the matrix elements to the particular value after the construction, use the assignment operator Mat::operator=(const Scalar& value) .

        4.Mat(Size size ,int type,const Scalar & s);

          Parameters:

    size 2D array size: Size(cols, rows) . In the Size() constructor, the number of rows and the number of columns go in the reverse order.
    type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.
    s An optional value to initialize each matrix element with. To set all the matrix elements to the particular value after the construction, use the assignment operator Mat::operator=(const Scalar& value) .

        Mat img;//创建无初始化矩阵
        Mat img1(200,100,CV_8UC1);//200行,100列(长200,宽100)
        Mat img2(Size(200,100),CV_8UC3,Scalar(0,255,0));//长100,宽200
        Mat img3(200,100,CV_8UC3,Scalar(0,255,0));//创建200行,100列的8位三通道矩阵
        Mat img4(200,100,CV_8UC1,Scalar(255));//创建单通道矩阵   

    方法:

         参考:https://docs.opencv.org/4.1.1/d3/d63/classcv_1_1Mat.html#a33fd5d125b4c302b0c9aa86980791a77;

          Mat img1 = imread("E:\项目\OPENCV\Mat\1.jpg", 1);
          Mat img2(img1);
          Mat img3 = img1;
          Mat img4 = img1.clone();
          Mat img5;
          img1.copyTo(img5);
       cvtColor(img1, img1, COLOR_BGR2HSV);//BGR图转为HSV图
      // cvtColor(img1, img1, COLOR_BGR2GRAY);
          imshow("img1", img1);
          imshow("img2", img2);
          imshow("img3", img3);//image1/2/3跟随原图变化
          imshow("img4", img4);
          imshow("img5", img5);//image4/5不会跟随原图变化
          waitKey(0);
     
    二、绘图函数
         1.line(Mat& Outputarray,Point startPoint,Point endPoint,const Scalar& color,int thickness=1, int lineType=8, int shift=0)
            Outputarray: 要绘制线段的图像。
            startPoint: 线段的起点。
            endPoint: 线段的终点。
            color: 线段的颜色,通过一个Scalar对象定义。
            thickness: 线条的宽度。
            lineType: 线段的类型。可以取值8, 4, 和CV_AA, 分别代表8邻接连接线,4邻接    连接线和反锯齿连接线。默认值为8邻接。为了获得更好地效果可以选用CV_AA(采用了高斯滤波)。
            shift: 坐标点小数点位数。
         2. Circle(Mat& img, CvPoint center, int radius, const Scalar&  color, int thickness=1, int lineType=8, int shift=0)
            img绘制圆的图像
            center为画圆的圆心坐标
            radius为圆的半径
            color为设定圆的颜色,规则根据B(蓝)G(绿)R(红)
            thickness 如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充
            line_type 线条的类型。默认是8
            shift 圆心坐标点和半径值的小数点位数
        3. Rectangle( Mat& img, img, Point pt1, Point pt2, CvScalar color,   int thickness=1, int line_type=8, int shift=0 )
           img图像.
           pt1矩形的一个顶点。
           pt2矩形对角线上的另一个顶点
           color线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。
           thickness组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。
           line_type线条的类型。
           见Line的描述shift坐标点的小数点位数。
        4.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)
    • 第一个参数,InputOutputArray img,要绘制椭圆的图像;

    • 第二个参数,const RotatedRect& box,通过RotatedRect选择椭圆表示,这意味着函数在旋转矩形中画一个椭圆;

    • 第三个参数,Point center,椭圆的中心点;

    • 第四个参数,Size axes,椭圆主轴尺寸的一半;

    • 第五个参数,double angle,椭圆旋转角,以度为单位;

    • 第六个参数,double startAngle,椭圆弧的起始角,以度为单位;

    • 第七个参数,double endAngle,椭圆弧的结束角,以度为单位;

    • 第八个参数,const Scalar& color,绘制椭圆线的颜色;

    • 第九个参数,int thickness = 1,线段的粗细;

    • 第十个参数,int lineType = LINE_8,线段的类型;

    • 线的类型:
      FILLED,填充;
      LINE_4,4连通的线条;
      LINE_8 ,8连通的线条;
      LINE_AA ,抗锯齿线条;

         Mat  image(500, 400, CV_8UC3, Scalar(255, 255, 255));
         imshow("原图", image);
         RNG rng = theRNG();
     
         line(image, Point(20, 20), Point(100, 100), Scalar(0,0,0), 5, 8);
        Scalar color(rng.uniform(0, 250), rng.uniform(0, 250), rng.uniform(0, 250));
        circle(image, Point(60, 60), 60, color, 1, 8);
        rectangle(image, Point(20, 20), Point(100, 100), color, 1, 8);
        imshow("绘图", image);
     
       
  • 相关阅读:
    从Active Directory中获取用户信息 [转载]
    使用System.DirectoryServices.Protocols实现对AD的简单操作[转载]
    phpMyAdmin 尝试连接到MySQL 服务器的错误解决方法
    MYSQL phpmyadmin恢复数据(#2006 MySQL server has gone away)
    解决IBM T23笔记本的Resource Conflict 问题
    打造自己地图AxTOCContrl树形控件——XUTocControl(成功解决节点控件拖拽问题)
    mantis配置收集(转载)
    仿World Wind构造自己的C#版插件框架——WW插件机制精简改造
    两台oracle数据库相互导数据(转载)
    将SATA硬盘驱动嵌入Windows XP安裝盘(转载)
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/11588868.html
Copyright © 2011-2022 走看看