直线、矩形、圆、椭圆、文字等绘制

 详细见代码:

#include<opencv2/opencv.hpp>
#include<iostream>


using namespace cv;
Mat bgImage;
const char*drawdemo_win = "draw shapes and text demo";
//注意调用函数,在main函数前声明函数。
void MyLines();
void MyRectangle();
void MyEllipse();
void MyCircle();
void MyPolygon();

int main(int argc, char** argv) {
    bgImage = imread("L:/4.jpg");
    if (!bgImage.data)
    {
        printf("could not load image...\n");
        return -1;
    }
    MyLines();       //call MyLine()函数 
    MyRectangle();   //call MyRectangle()函数
    MyEllipse();     //call MyEllipse()函数
    MyCircle();      //call MyCircle()函数
    MyPolygon();     //call MyPolygon()函数 

    //图片上绘制文字
    putText(bgImage,"Hello Opencv",Point(300,300),CV_FONT_HERSHEY_COMPLEX,1.0,Scalar(12,23,200),3,8);
    //参数:1.目标图像  2.内容  3.左下角坐标 4.字体格式 5.字体大小 6.字体颜色 7.字体粗细   8.默认8
    namedWindow(drawdemo_win, CV_WINDOW_AUTOSIZE);
    imshow(drawdemo_win, bgImage);
    waitKey(0);
    return 0;
}

//直线函数
void MyLines() {
    Point p1 = Point(20, 30);
    Point p2;
    p2.x = 300;
    p2.y = 300;
    Scalar color = Scalar(0, 0, 255);
    line(bgImage, p1, p2, color, 2, LINE_8);  //LINE_8为反锯齿线条
    //line的参数:1.写入图像  2.p1点  3.p2点  4.颜色  5.线条的粗细  6.线条的类型
}

//矩形函数
void MyRectangle() {
    Rect rect = Rect(200, 100, 300, 300);
    //Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height)
    //定义一个左上角点坐标为(_x, _y)的_width*_height矩形窗口
    Scalar color = Scalar(255, 0, 0);
    rectangle(bgImage, rect, color, 2, LINE_8);
}

//椭圆函数
void MyEllipse() {
    Scalar color = Scalar(0, 255, 0);
    ellipse(bgImage, Point(bgImage.cols / 2, bgImage.rows / 2), Size(bgImage.cols / 4, bgImage.rows / 8), 45, 0, 360, color, 2, LINE_8);
    //ellipse函数参数: 1. 绘制的目标图像   2.绘制椭圆的中心  3.绘制椭圆的长轴和短轴  4.椭圆的倾斜角度  5.6.线条的角度(弧)(0-360)  7.颜色  8.线条粗细 9.线条类型
 }

//圆函数
void MyCircle() {
    Scalar color = Scalar(0, 255, 255);
    Point center = Point(bgImage.cols / 2, bgImage.rows / 2);
    circle(bgImage, center, 150, color, 2, 8);
}

//多边形填充函数
void MyPolygon() {
    Point pts[1][5];                   //定义一个五个点的数组二维
        pts[0][0] = Point(100, 100);
        pts[0][1] = Point(100, 200); 
        pts[0][2] = Point(200, 200);
        pts[0][3] = Point(200, 100);
        pts[0][4] = Point(100, 100);

        const Point*ppts[] = { pts[0] };  //ppts的指针指向pts[0]的数组
        int npt[] = { 5 };               // 一维数组npt为5,代表5个点
        Scalar color = Scalar(255, 0, 255);

        fillPoly(bgImage, ppts, npt, 1, color, 8);
        //fillPoly函数参数:1.输入图像  2.二维数组指针指向顶点  3.一维数组指针顶点个数  4. 多边形个数  5.填充颜色  6.line_type=8默认参数
}

猜你喜欢

转载自www.cnblogs.com/Jack-Elvis/p/11494332.html