Fork me on GitHub

opencv之基本图形

直线- 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() 
    )	

代码

#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#define w 400

void MyLine( cv::Mat img, cv::Point start, cv::Point end )
{
  int thickness = 2;
  int lineType = cv::LINE_8;
  cv::line( img, start, end, cv::Scalar( 0, 0, 0 ), thickness, lineType );
}

void MyFilledCircle( cv::Mat img, cv::Point center )
{
  cv::circle( img, center, w/32, cv::Scalar( 0, 0, 255 ), cv::FILLED, cv::LINE_8 );
}

void MyEllipse( cv::Mat img, double angle )
{
  int thickness = 2;
  int lineType = 8;
  cv::ellipse( img, cv::Point( w/2, w/2 ), cv::Size( w/4, w/16 ), angle, 0, 360, 
               cv::Scalar( 255, 0, 0 ), thickness, lineType );
}

void MyPolygon( cv::Mat img )
{
  int lineType = cv::LINE_8;
  cv::Point rook_points[1][20];
  rook_points[0][0]  = cv::Point(    w/4,   7*w/8 );
  rook_points[0][1]  = cv::Point(  3*w/4,   7*w/8 );
  rook_points[0][2]  = cv::Point(  3*w/4,  13*w/16 );
  rook_points[0][3]  = cv::Point( 11*w/16, 13*w/16 );
  rook_points[0][4]  = cv::Point( 19*w/32,  3*w/8 );
  rook_points[0][5]  = cv::Point(  3*w/4,   3*w/8 );
  rook_points[0][6]  = cv::Point(  3*w/4,     w/8 );
  rook_points[0][7]  = cv::Point( 26*w/40,    w/8 );
  rook_points[0][8]  = cv::Point( 26*w/40,    w/4 );
  rook_points[0][9]  = cv::Point( 22*w/40,    w/4 );
  rook_points[0][10] = cv::Point( 22*w/40,    w/8 );
  rook_points[0][11] = cv::Point( 18*w/40,    w/8 );
  rook_points[0][12] = cv::Point( 18*w/40,    w/4 );
  rook_points[0][13] = cv::Point( 14*w/40,    w/4 );
  rook_points[0][14] = cv::Point( 14*w/40,    w/8 );
  rook_points[0][15] = cv::Point(    w/4,     w/8 );
  rook_points[0][16] = cv::Point(    w/4,   3*w/8 );
  rook_points[0][17] = cv::Point( 13*w/32,  3*w/8 );
  rook_points[0][18] = cv::Point(  5*w/16, 13*w/16 );
  rook_points[0][19] = cv::Point(    w/4,  13*w/16 );
  const cv::Point* ppt[1] = { rook_points[0] };
  int npt[] = { 20 };
  cv::fillPoly( img, ppt, npt, 1, cv::Scalar( 255, 255, 255 ), lineType );
}

int main( void )
{
  std::string atom_window = "Drawing 1: Atom";
  std::string rook_window = "Drawing 2: Rook";
  cv::Mat atom_image = cv::Mat::zeros( w, w, CV_8UC3 );
  cv::Mat rook_image = cv::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, cv::Point( w/2, w/2) ); //实心圆

  MyPolygon( rook_image );
  cv::rectangle( rook_image, cv::Point( 0, 7*w/8 ), cv::Point( w, w), 
                cv::Scalar( 0, 255, 255 ), cv::FILLED, cv::LINE_8 );
  MyLine( rook_image, cv::Point( 0, 15*w/16 ), cv::Point( w, 15*w/16 ) );
  MyLine( rook_image, cv::Point( w/4, 7*w/8 ), cv::Point( w/4, w ) );
  MyLine( rook_image, cv::Point( w/2, 7*w/8 ), cv::Point( w/2, w ) );
  MyLine( rook_image, cv::Point( 3*w/4, 7*w/8 ), cv::Point( 3*w/4, w ) );

  cv::imshow( atom_window, atom_image );
  cv::moveWindow( atom_window, 0, 200 );
  cv::imshow( rook_window, rook_image );
  cv::moveWindow( rook_window, w, 200 );
  cv::waitKey( 0 );
  return(0);
}
posted @ 2021-06-27 11:07  chrislzy  阅读(53)  评论(0编辑  收藏  举报