OpenCV 绘制图形

2020-07-29 15:14:54 浏览数 (1)

OpenCV绘制图形

直线
代码语言:javascript复制
void cv::line   (
InputOutputArray    img,   //图像
Point   pt1,               //线的起点
Point   pt2,               //线的终点
const Scalar &  color,     //线的颜色
int     thickness = 1,     //线的粗细
int     lineType = LINE_8, //线的类型
int     shift = 0          //点坐标中小数位数
)
矩形
代码语言:javascript复制
void cv::rectangle  (
InputOutputArray    img,      //图像
Point   pt1,                  //矩形的一个顶点
Point   pt2,                  //和上一个顶点相对的顶点
const Scalar &  color,        //线的颜色
int     thickness = 1,        //线的粗细
int     lineType = LINE_8,    //线的类型
int     shift = 0             //点坐标中小数位数
)
圆形
代码语言:javascript复制
void cv::circle (
InputOutputArray    img,    //图像
Point   center,             //圆心
int     radius,             //半径
const Scalar &  color,      //线的颜色
int     thickness = 1,      //如果是正数,则为线的粗细,如果为负数则填充圆的内部
int     lineType = LINE_8,  //线的类型
int     shift = 0           ////点坐标中小数位数
)
椭圆
代码语言:javascript复制
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             //中心坐标和半轴的小数位数
)
多边形
代码语言:javascript复制
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 就可以绘制多边形

文字
代码语言:javascript复制
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时,图像原点位于左下角。否则,它在左上角
)

参考代码

代码语言:javascript复制
#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>

using namespace cv;
using namespace std;

int main()
{
    // 绘制直线
    Mat lineImage(Size(300, 300), CV_8UC3, Scalar(0));
    Point p1 = Point(60, 50);
    Point p2 = Point(250, 200);
    namedWindow("line", CV_WINDOW_AUTOSIZE);
    line(lineImage, p1, p2, CV_RGB(255, 0, 0), 1);
    imshow("line", lineImage);
    imwrite("./line.jpg",lineImage);
    // 绘制矩形
    Mat rectangleImage(Size(300, 300), CV_8UC3, Scalar(0));
    Point rec_p1 = Point(60, 50);
    Point rec_p2 = Point(250, 200);
    rectangle(rectangleImage, rec_p1, rec_p2, CV_RGB(255, 0, 0), 1);
    imshow("rectangle", rectangleImage);
    imwrite("./rectangle.jpg",rectangleImage);
    // 绘制圆形
    Mat circleImage(Size(300, 300), CV_8UC3, Scalar(0));
    Point circle_center = Point(150, 150);
    int circle_radius = 80;
    circle(circleImage, circle_center, circle_radius, Scalar(255, 0, 0), 2);    //Scalar( (b), (g), (r), 0 )
    imshow("circle", circleImage);
    imwrite("./circle.jpg",circleImage);
    // 绘制椭圆
    Mat ellipseImage(Size(300, 300), CV_8UC3, Scalar(0));
    Point center = Point(150, 150);
    Size axes = Size(150, 80);
    double  angle = 4;
    ellipse(ellipseImage, center, axes, angle, 0,360,Scalar(0, 0, 255), 1, LINE_AA);
    imshow("ellipse", ellipseImage);
    imwrite("./ellipse.jpg",ellipseImage);
    // 绘制多边形
    Mat polylinesImage(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, 100) );
    pt.push_back ( Point(140, 240) );
    pt.push_back ( Point(240, 130) );
    polylines(polylinesImage ,pt ,1, CV_RGB(0, 255, 0), 2);
    imshow("polylines", polylinesImage);
    imwrite("./polylines.jpg",polylinesImage);
    // 绘制文字
    Mat putTextImage(Size(300, 300), CV_8UC3, Scalar(0));
    string str = "Hello OpenCV";
    putText(putTextImage, str,Point(20,150), FONT_HERSHEY_SIMPLEX,1, Scalar(0, 0, 255), 1, LINE_AA);
    imshow("Text", putTextImage);
    imwrite("./Text.jpg",putTextImage);

    waitKey();
    return 0;
}
结果

参考

[【OpenCV3图像处理】绘图功能总结(直线,矩形,圆,椭圆,多边形,文字)]https://blog.csdn.net/u011574296/article/details/73332523

0 人点赞