OpenCV之基本图形绘制:圆、椭圆、直线、矩形、多边形等(C++实现)

69 篇文章 14 订阅
53 篇文章 15 订阅

OpenCV的基本图像绘制函数主要包括:

  • 用于绘制直线的line函数
  • 用于绘制椭圆的ellipse函数
  • 用于绘制矩形的rectangle函数
  • 用于绘制圆的circle函数
  • 用于绘制填充的多边形的fillPoly函数

 

可以通过具体的代码实例学习OpenCV各种绘制函数的用法。

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;
using namespace std;

//定义一下辅助宏
#define WINDOW_NAME "图1"
#define WINDOW_WIDTH 600

void DrawEllipse( Mat img, double angle);
void DrawFilledCircle(Mat img, Point centor);
void DrawPolygon(Mat img);
void DrawLine(Mat img, Point start, Point end);

int main() {
//    创建空白的Mat图像
    Mat atomImage = Mat::zeros(WINDOW_WIDTH, WINDOW_WIDTH, CV_8UC3);

//    这里是画了4个椭圆,采用ellipse函数
    DrawEllipse(atomImage, 90);
    DrawEllipse(atomImage, 0);
    DrawEllipse(atomImage, 45);
    DrawEllipse(atomImage, -45);

//    画填充圆
    DrawFilledCircle(atomImage, Point(WINDOW_WIDTH/2, WINDOW_WIDTH/2));

//    画多边形,这里以三角形为例
    DrawPolygon(atomImage);

//    画矩形,参数:图像,左上角,右下角,颜色,线型(-1表示实心填充)
    rectangle(atomImage,
            Point(WINDOW_WIDTH/4, WINDOW_WIDTH/4),
            Point(WINDOW_WIDTH*2/4, WINDOW_WIDTH*2/4),
            Scalar(0, 255, 255),
            5);

//    画直线,参数:图像,起始点,结束点
    DrawLine(atomImage, Point(WINDOW_WIDTH/3, WINDOW_WIDTH/2), Point(WINDOW_WIDTH*2/3, WINDOW_WIDTH/2));

    imshow(WINDOW_NAME, atomImage);
    waitKey(0);
    
    return 0;
}

void DrawEllipse( Mat img, double angle){
    int thickness = 2;
    int linetype = 8;
//    使用ellipse函数画椭圆,参数:图像,中心位置,大小,旋转角度,颜色,线宽,线型
    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;

//    画填充圆,参数:图像, 圆心,半径,颜色,线宽
//    thickness = -1,因此是实心
    circle(img, center,
            WINDOW_WIDTH / 32,
            Scalar(0, 0, 255),
            thickness, lineType);
}

void DrawPolygon(Mat img){
    int lineType = 8;
//    定义points,包含3个点
     Point_<int> points[1][3];
     points[0][0] = Point(WINDOW_WIDTH/2, WINDOW_WIDTH/3);
     points[0][1] = Point(WINDOW_WIDTH/3, WINDOW_WIDTH*2/3);
     points[0][2] = Point(WINDOW_WIDTH*2/3, WINDOW_WIDTH*2/3);

     const Point* ppt[1] = {points[0]};
     int npt[] = {3};

//     画多边形,参数:图像,点,点的个数,颜色,线型
     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);
}

结果:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值