• opencv之绘制基本图形


    opencv之绘制基本图形

    • 直线
    • 矩形
    • 椭圆
    • 多边形
    #include <opencv2/core.hpp>
    #include <opencv2/imgproc.hpp>
    #include <opencv2/highgui.hpp>
    #define w 400
    using namespace cv;
    
    void MyLine( Mat img, Point start, Point end )
    {
      int thickness = 2;
      int lineType = LINE_8;
      line( img,
        start,
        end,
        Scalar( 0, 0, 0 ),
        thickness,
        lineType );
    }
    
    void MyFilledCircle( Mat img, Point center )
    {
      circle( img,
          center,
          w/32,
          Scalar( 0, 0, 255 ),
          FILLED,
          LINE_8 );
    }
    
    void MyEllipse( Mat img, double angle )
    {
      int thickness = 2;
      int lineType = 8;
      ellipse( img,
           Point( w/2, w/2 ),
           Size( w/4, w/16 ),
           angle,
           0,
           360,
           Scalar( 255, 0, 0 ),
           thickness,
           lineType );
    }
    
    void MyPolygon( Mat img )
    {
      int lineType = LINE_8;
      Point rook_points[1][20];
      rook_points[0][0]  = Point(    w/4,   7*w/8 );
      rook_points[0][1]  = Point(  3*w/4,   7*w/8 );
      rook_points[0][2]  = Point(  3*w/4,  13*w/16 );
      rook_points[0][3]  = Point( 11*w/16, 13*w/16 );
      rook_points[0][4]  = Point( 19*w/32,  3*w/8 );
      rook_points[0][5]  = Point(  3*w/4,   3*w/8 );
      rook_points[0][6]  = Point(  3*w/4,     w/8 );
      rook_points[0][7]  = Point( 26*w/40,    w/8 );
      rook_points[0][8]  = Point( 26*w/40,    w/4 );
      rook_points[0][9]  = Point( 22*w/40,    w/4 );
      rook_points[0][10] = Point( 22*w/40,    w/8 );
      rook_points[0][11] = Point( 18*w/40,    w/8 );
      rook_points[0][12] = Point( 18*w/40,    w/4 );
      rook_points[0][13] = Point( 14*w/40,    w/4 );
      rook_points[0][14] = Point( 14*w/40,    w/8 );
      rook_points[0][15] = Point(    w/4,     w/8 );
      rook_points[0][16] = Point(    w/4,   3*w/8 );
      rook_points[0][17] = Point( 13*w/32,  3*w/8 );
      rook_points[0][18] = Point(  5*w/16, 13*w/16 );
      rook_points[0][19] = Point(    w/4,  13*w/16 );
      const Point* ppt[1] = { rook_points[0] };
      int npt[] = { 20 };
      fillPoly( img,
            ppt,
            npt,
            1,
            Scalar( 255, 255, 255 ),
            lineType );
    }
    
    int main( void )
    {
      char atom_window[] = "Drawing 1: Atom";
      char rook_window[] = "Drawing 2: Rook";
      Mat atom_image = Mat::zeros( w, w, CV_8UC3 );
      Mat rook_image = Mat::zeros( w, w, CV_8UC3 );
      MyEllipse( atom_image, 90 );
      MyEllipse( atom_image, 0 );
      MyEllipse( atom_image, 45 );
      MyEllipse( atom_image, -45 );
      MyFilledCircle( atom_image, Point( w/2, w/2) );
      MyPolygon( rook_image );
    
      rectangle( rook_image,
             Point( 0, 7*w/8 ),
             Point( w, w),
             Scalar( 0, 255, 255 ),
             FILLED,
             LINE_8 );
      MyLine( rook_image, Point( 0, 15*w/16 ), Point( w, 15*w/16 ) );
      MyLine( rook_image, Point( w/4, 7*w/8 ), Point( w/4, w ) );
      MyLine( rook_image, Point( w/2, 7*w/8 ), Point( w/2, w ) );
      MyLine( rook_image, Point( 3*w/4, 7*w/8 ), Point( 3*w/4, w ) );
      imshow( atom_window, atom_image );
      moveWindow( atom_window, 0, 200 );
      imshow( rook_window, rook_image );
      moveWindow( rook_window, w, 200 );
      waitKey( 0 );
      return(0);
    }
    

    直线- cv::line()

    void cv::line	(	InputOutputArray 	img,
        Point 	pt1,
        Point 	pt2,
        const Scalar & 	color,
        int 	thickness = 1,
        int 	lineType = LINE_8,
        int 	shift = 0 
        )	
    

    圆-cv::circle()

    void cv::circle	(	InputOutputArray 	img,
        Point 	center,
        int 	radius,
        const Scalar & 	color,
        int 	thickness = 1,
        int 	lineType = LINE_8,
        int 	shift = 0 
        )	
    

    矩形-cv::rectangle()

    void cv::rectangle	(	InputOutputArray 	img,
        Point 	pt1,
        Point 	pt2,
        const Scalar & 	color,
        int 	thickness = 1,
        int 	lineType = LINE_8,
        int 	shift = 0 
        )	
    

    椭圆-cv::ellipse()

    void cv::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 
        )	
    

    多边形-cv::fillPoly()

    void cv::fillPoly	(	Mat & 	img,
        const Point ** 	pts,
        const int * 	npts,
        int 	ncontours,
        const Scalar & 	color,
        int 	lineType = LINE_8,
        int 	shift = 0,
        Point 	offset = Point() 
        )	
    
  • 相关阅读:
    VB中 参数不可选
    VB中 “实时错误'-2147217887” 和 “编译错误:无效限定符”
    VB中 文本框的ScrollBars属性不管用
    VB中 “编译错误:未找到方法或数据成员””和“实时错误'424'”
    【读书笔记】之《逻辑思维》
    【My SQL】常见语句
    【自考】《数据库系统原理》之键、主键、超键等概念
    Python接口测试实战1(下)- 接口测试工具的使用
    Python接口测试实战1(上)- 接口测试理论
    为应用程序池 ''DefaultAppPool'' 提供服务的进程意外终止。进程 ID 是 ''xxx''问题的解决方法
  • 原文地址:https://www.cnblogs.com/ChrisCoder/p/10260437.html
Copyright © 2020-2023  润新知