基本几何图像的绘制
四种基本图形的绘制
void QuickDemo::draw_demo(Mat& img)
{
//绘制矩形
//1.定义一个矩形
Rect rect;
rect.x = 200;//绘制的起始坐标
rect.y = 200;//绘制的起始坐标
//在计算机中,x和y的起点都是在左上角,窗口的左上角开始,向右则x增大,向下则y增大
rect.width = 200;//横
rect.height = 200;//纵
//2.调用api绘制矩形
rectangle(img,rect,Scalar(0,0,255),2,LINE_8,0);
//参数说明:将要把矩形画到什么地方去,rect是定义好的矩形,将要是什么颜色的(定义画布上的每一个灰度值),线宽
//绘制圆形,调用circle api
circle(img,Point(100,100),100,Scalar(255,0,0),2,LINE_8,0);
//api说明:将要画入的图像,所画圆形的中心点,圆形的半径,所画圆形的颜色,所瞄出来的线宽,抗锯齿等
//绘制线
//两点确定一条直线,然后再添加颜色
line(img, Point(200, 200), Point(400, 400), Scalar(0,255,0),2, LINE_AA, 0);
//绘制椭圆,方法与矩形类型
RotatedRect rrt;
rrt.center = Point(300,300);
rrt.size = Size(100, 200);
rrt.angle = 45;
ellipse(img,rrt,Scalar(0,0,255),2,LINE_AA);
imshow("img", img);
}
小案例:绘制随机图形并且动态显示
本案例主要通过绘制随机图形来加深对这几种绘制几何图像的api的认识和使用的熟练程度.
void QuickDemo::random_drawing()
{
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
RNG rng(12345);
while (1)
{
char c = waitKey(10);
if (c == 27)
{
break;
}
//将该图清空
canvas = Scalar(0, 0, 0);
//获取随机点
int x1 = rng.uniform(0,512);//输入产生随机数的范围
int y1 = rng.uniform(0, 512);
int x2 = rng.uniform(0, 512);
int y2 = rng.uniform(0, 512);
int b = rng.uniform(0, 255);
int g = rng.uniform(0, 255);
int r = rng.uniform(0, 255);
line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), LINE_AA, 0);
imshow("dst", canvas);
}
}
基本上我们通过这个案例,绘制图形,主要的就是要确定图形的元素,通过端点,中心点,颜色,然后就是一些辅助参数,比如Line等来确定
多边形填充与绘制
void QuickDemo::multiple_drawing()
{
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
Point p1(100,100);
Point p2(350, 100);
Point p3(450, 280);
Point p4(320, 450);
Point p5(80, 400);
//定义五个点,弄成一个几何
std::vector <Point> pts;
std::vector <std::vector<Point> > ptss;
pts.push_back(p1);
pts.push_back(p2);
pts.push_back(p3);
pts.push_back(p4);
pts.push_back(p5);
ptss.push_back(pts);
//画多边形的api
//polylines(canvas, pts, true, Scalar(0,0,255), 2, LINE_AA, 0);//画线的
drawContours(canvas, ptss, -1,Scalar(0,255,0),-1);
imshow("canvas", canvas);
}