opencv---绘图操作

#include "stdafx.h"
#include <opencv.hpp>
using namespace cv;

#define WINDOW_WIDTH 600

void DrawEllipse(Mat img, double angle);//绘制椭圆
void DrawCircle(Mat img,Point center); //绘制圆
void DrawPolygon(Mat img);//绘制多边形
void DrawLine(Mat img,Point start,Point end); //绘制直线

int _tmain(int argc, _TCHAR* argv[])
{
	//创建空白的Mat图像
	Mat image = Mat::zeros(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3);

	DrawEllipse(image,90);
	DrawEllipse(image,0);
	DrawEllipse(image,45);
	DrawEllipse(image,-45);

	DrawCircle(image,Point(WINDOW_WIDTH/2,WINDOW_WIDTH/2));

	DrawPolygon(image);

	DrawLine(image,Point(0,0),Point(WINDOW_WIDTH,WINDOW_WIDTH));

	imshow("img",image);

	waitKey(0);

	return 0;
}

void DrawEllipse(Mat img, double angle)
{
	int thickness = 2;
	int lineType = 8;
	
	ellipse(img,                                  //要绘制的图像
		    Point(WINDOW_WIDTH/2,WINDOW_WIDTH/2), //椭圆的中心点
			Size(WINDOW_WIDTH/4,WINDOW_WIDTH/16), //椭圆的大小位于此矩形内
			angle,                                //椭圆旋转的角度
			0,                                    //起始弧度
			360,                                  //终止弧度
			Scalar(255,129,0),                    //椭圆颜色
			thickness,                            //椭圆线宽
			lineType                              //椭圆线型
			);
}

void DrawCircle(Mat img,Point center)
{
	int thickness = -1;
	int lineType = 8;

	circle(img,             //要绘制的图像
		   center,          //圆心
		   WINDOW_WIDTH/32, //半径
		   Scalar(0,0,255), //颜色
		   thickness,       //线宽
		   lineType         //线型
		   );
}

void DrawPolygon(Mat img)
{
	int lineType = 8;

	//创建一些点
	Point points[1][13];

	points[0][0] = Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
	points[0][1] = Point(3*WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
	points[0][2] = Point(3*WINDOW_WIDTH/4,13*WINDOW_WIDTH/8);
	points[0][3] = Point(4*WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
	points[0][4] = Point(5*WINDOW_WIDTH/4,6*WINDOW_WIDTH/8);
	points[0][5] = Point(6*WINDOW_WIDTH/4,5*WINDOW_WIDTH/8);
	points[0][6] = Point(7*WINDOW_WIDTH/4,4*WINDOW_WIDTH/8);
	points[0][7] = Point(8*WINDOW_WIDTH/4,3*WINDOW_WIDTH/8);
	points[0][8] = Point(9*WINDOW_WIDTH/4,2*WINDOW_WIDTH/8);
	points[0][9] = Point(10*WINDOW_WIDTH/4,1*WINDOW_WIDTH/8);
	points[0][10] = Point(11*WINDOW_WIDTH/4,3*WINDOW_WIDTH/8);
	points[0][11] = Point(12*WINDOW_WIDTH/4,4*WINDOW_WIDTH/8);
	points[0][12] = Point(13*WINDOW_WIDTH/4,5*WINDOW_WIDTH/8);
	
	const Point* ppt[1] = {points[0]};
	int npt[] = {13};

	fillPoly(img,                //要绘制的图像
		     ppt,                //多边形的定点集
			 npt,                //定点数目
			 1,                  //绘制多边形数量
			 Scalar(255,125,25), //多边形颜色
			 lineType            //线型
			 );
}

void DrawLine(Mat img,Point start,Point end)
{
	int thinkness = 2;
	int lineType = 8;

	line(img,           //要绘制的图像
		 start,         //起点
		 end,           //终点
		 Scalar(25,111,222), //颜色
		 thinkness,     //线宽
		 lineType       //线型
		 );
}