opencv 基础(一)画图

编程环境:vs2010 opencv库

实现功能:(1)在窗口1中显示化学原子示意图

                 (2)在窗口1中显示组合多边形

在窗口1中显示化学原子示意图功能分解:

                  (1)4个椭圆

                   (2)一个实心圆

在窗口1中显示组合多边形功能分解

                    (1)线

                     (2)多边形 

代码:

#include <opencv2/opencv.hpp>
#include <vector>
#include <string.h>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include  <opencv2/core/core.hpp>


#define WINDOW_NAME1 "绘制图1"
#define WINDOW_NAME2 "绘制图2"
#define WINDOW_WIDTH 600
using namespace std;
using namespace cv;


void DrawEllipe(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 DrawFilledCircle(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 rockpoint[1][20];
rockpoint[0][0]=Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
rockpoint[0][1]=Point(3*WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
rockpoint[0][2]=Point(3*WINDOW_WIDTH/4,7*WINDOW_WIDTH/16);
rockpoint[0][3]=Point(WINDOW_WIDTH/16,7*WINDOW_WIDTH/16);
rockpoint[0][4]=Point(WINDOW_WIDTH/32,7*WINDOW_WIDTH/8);


rockpoint[0][5]=Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
rockpoint[0][6]=Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
rockpoint[0][7]=Point(WINDOW_WIDTH/40,7*WINDOW_WIDTH/8);
rockpoint[0][8]=Point(WINDOW_WIDTH/40,7*WINDOW_WIDTH/4);
rockpoint[0][9]=Point(WINDOW_WIDTH/40,7*WINDOW_WIDTH/4);


rockpoint[0][10]=Point(WINDOW_WIDTH/40,7*WINDOW_WIDTH/8);
rockpoint[0][11]=Point(WINDOW_WIDTH/40,7*WINDOW_WIDTH/8);
rockpoint[0][12]=Point(WINDOW_WIDTH/40,7*WINDOW_WIDTH/4);
rockpoint[0][13]=Point(WINDOW_WIDTH/40,7*WINDOW_WIDTH/4);
rockpoint[0][14]=Point(WINDOW_WIDTH/40,7*WINDOW_WIDTH/8);


rockpoint[0][15]=Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
rockpoint[0][16]=Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
rockpoint[0][17]=Point(WINDOW_WIDTH/32,7*WINDOW_WIDTH/8);
rockpoint[0][18]=Point(WINDOW_WIDTH/16,7*WINDOW_WIDTH/16);
rockpoint[0][19]=Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/16);


const Point* ppt[1]={rockpoint[0]};
int npt[]={20};


fillPoly(img,
ppt,
npt,
1,
Scalar(255,255,255),
lineType);


}
void DrawLine(Mat img,Point start,Point end)
{
int thickness=2;
int lineType=8;
line(img,
start,
end,
Scalar(0,0,0),
thickness,
lineType);
}
int main()
{
Mat atomImage=Mat::zeros(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3);
Mat rookImage=Mat::zeros(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3);
//绘制椭圆
DrawEllipe(atomImage,90);
DrawEllipe(atomImage,0);
DrawEllipe(atomImage,45);
DrawEllipe(atomImage,-45);
//绘制圆心


DrawFilledCircle(atomImage,Point(WINDOW_WIDTH/2,WINDOW_WIDTH/2));
//绘制多边形
DrawPolygon(rookImage);


//绘制矩形
rectangle(rookImage,Point(0,7*WINDOW_WIDTH/8),Point(WINDOW_WIDTH,WINDOW_WIDTH),Scalar(0,255,255),-1,8);


//绘制一些线段

DrawLine(rookImage,Point(0,15*WINDOW_WIDTH/16) ,Point(WINDOW_WIDTH,15*WINDOW_WIDTH/16));


DrawLine(rookImage,Point(0,WINDOW_WIDTH/4) ,Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8));
DrawLine(rookImage,Point(0,3*WINDOW_WIDTH/4) ,Point(WINDOW_WIDTH,7*WINDOW_WIDTH/8));
DrawLine(rookImage,Point(0,WINDOW_WIDTH/2) ,Point(WINDOW_WIDTH,15*WINDOW_WIDTH/16));
imshow(WINDOW_NAME1,atomImage);
moveWindow(WINDOW_NAME1,0,200);
imshow(WINDOW_NAME2,rookImage);
moveWindow(WINDOW_NAME2,WINDOW_WIDTH,200);
waitKey(0);
return 0;
}


现象:


opencv 基础(一)画图