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

 详细见代码:

#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...
");
        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);
// 圆参数:1.图像, 2.圆心 3.半径 4.颜色 5.圆周线条粗细 6.线条类型 }
//多边形填充函数 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默认参数 }

结果如图所示:

 

原文地址:https://www.cnblogs.com/Jack-Elvis/p/11494332.html