【OpenCV3图像处理】绘图功能总结(直线,矩形,圆,椭圆,多边形,文字)

绘图功能参考:
opencv3.2帮助文档 / Drawing Functions板块

1、直线Line

函数原型:

void cv::line   (   
InputOutputArray    img,   //图像
Point   pt1,               //线的起点
Point   pt2,               //线的终点
const Scalar &  color,     //线的颜色
int     thickness = 1,     //线的粗细 
int     lineType = LINE_8, //线的类型 
int     shift = 0          //点坐标中小数位数 
)   

实例代码

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

using namespace cv;
using namespace std;

int main()
{
    Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));

    Point p1 = Point(60, 50);
    Point p2 = Point(250, 200);

    line(srcImage, p1, p2, CV_RGB(255, 0, 0), 1);

    imshow("效果图", srcImage);
    waitKey();

    return 0;
}

这里写图片描述

2、矩形Rectangle

函数原型:

void cv::rectangle  (   
InputOutputArray    img,      //图像
Point   pt1,                  //矩形的一个顶点
Point   pt2,                  //和上一个顶点相对的顶点
const Scalar &  color,        //线的颜色
int     thickness = 1,        //线的粗细 
int     lineType = LINE_8,    //线的类型 
int     shift = 0             //点坐标中小数位数 
)   

实例代码

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

using namespace cv;
using namespace std;

int main()
{
    Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));

    Point p1 = Point(60, 50);
    Point p2 = Point(250, 200);

    rectangle(srcImage, p1, p2, CV_RGB(255, 0, 0), 1);

    imshow("效果图", srcImage);
    waitKey();

    return 0;
}

这里写图片描述

3、圆形Circle

函数原型:


void cv::circle (   
InputOutputArray    img,    //图像
Point   center,             //圆心
int     radius,             //半径
const Scalar &  color,      //线的颜色
int     thickness = 1,      //如果是正数,则为线的粗细,如果为负数则填充圆的内部
int     lineType = LINE_8,  //线的类型
int     shift = 0           ////点坐标中小数位数
)   

实例代码

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

using namespace cv;
using namespace std;

int main()
{
    Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));

    Point circle_center = Point(150, 150);

    int circle_radius = 80;

    circle(srcImage, circle_center, circle_radius, Scalar(255, 0, 0), 2);    //Scalar( (b), (g), (r), 0 )

    imshow("效果图", srcImage);

    waitKey();

    return 0;
}

这里写图片描述

4、椭圆Ellipse

函数原型:

void cv::ellipse    (   
InputOutputArray    img,      //图像
Point   center,               //椭圆中心
Size    axes,                 //椭圆长半轴和短半轴
double  angle,                //椭圆的旋转角度
double  startAngle,           //椭圆弧的起始角
double  endAngle,             //椭圆弧的结束角
const Scalar &  color,        //线的颜色
int     thickness = 1,        //如果是正数,则为线的粗细,如果为负数则填充椭圆的内部
int     lineType = LINE_8,    //线的类型
int     shift = 0             //中心坐标和半轴的小数位数
)   

这里写图片描述

实例代码

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

using namespace cv;
using namespace std;

int main()
{
    Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));

    Point center = Point(150, 150);

    Size axes = Size(150, 80);

    double  angle = 45;
    //绘制0~360度,完整的椭圆
    ellipse(srcImage, center, axes, angle, 0,360,Scalar(0, 0, 255), 1, LINE_AA);
    //绘制0~180度,椭圆的一部分
    ellipse(srcImage, center, axes, angle, 0,180,Scalar(0, 0, 255), 1, LINE_AA);

    //RotatedRect m_ellipse;
    //m_ellipse.center = center;
    //m_ellipse.angle = angle;
    //m_ellipse.size = axes;

    //ellipse(srcImage, m_ellipse, Scalar(0, 0, 255),1 , LINE_AA);

    imshow("效果图", srcImage);
    waitKey();

    return 0;
}

这里写图片描述 这里写图片描述

5、多边形Polygon

函数原型

void cv::polylines  (   
InputOutputArray    img,    //图像
InputArrayOfArrays  pts,    //点集
bool    isClosed,           //true为闭合,最后一个点和第一个点连起来
const Scalar &  color,      //线的颜色
int     thickness = 1,      //线的粗细
int     lineType = LINE_8,  //线的类型
int     shift = 0           //点的坐标精度
)   

polylines ()函数是用来画折线的,如果输入的点集是多边形的顶点集合,isClosed=true就可以绘制多边形

实例代码

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

using namespace cv;
using namespace std;

int main()
{
    Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));

    vector<Point> pt;

    pt.push_back ( Point(50, 50) );

    pt.push_back ( Point(50, 120) );

    pt.push_back ( Point(90, 160) );

    pt.push_back ( Point(140, 240) );

    pt.push_back ( Point(240, 70) );

    polylines(srcImage ,pt ,1, CV_RGB(0, 255, 0), 2);

    imshow("效果图", srcImage);
    waitKey();

    return 0;
}

这里写图片描述

6、绘制文字PutText

函数原型

void cv::putText    (                
InputOutputArray    img,             //图像
const String &  text,                //要显示的字符串
Point   org,                         //图片中文本字符串的左下角
int     fontFace,                    //字体类型
double  fontScale,                   //字体大小
Scalar  color,                       //颜色
int     thickness = 1,               //粗细
int     lineType = LINE_8,           //线的类型
bool    bottomLeftOrigin = false     //当TRUE时,图像原点位于左下角。否则,它在左上角
)   

实例代码

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>  
#include<vector>  
#include<opencv2/opencv.hpp>  
#include<string>

using namespace cv;
using namespace std;

int main()
{
    Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));

    string str = "I am a student!";

    putText(srcImage, str,Point(20,150), FONT_HERSHEY_SIMPLEX,1, Scalar(0, 0, 255), 1, LINE_AA);

    imshow("效果图", srcImage);
    waitKey();

    return 0;
}

这里写图片描述

这个函数的字体,显示字的位置,几个参数比较麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值