opencv笔记——绘制图形与文字

部分笔记参考自点击这里

cv::Point与cv::Scalar

Point表示2D平面上的一个点(x, y)

Point p;
p.x = 11;
p.y = 14;

或者

Point p = Point(11, 14);
    1

Scalar表示四个元素的向量

Scalar(a, b, c, d)//a = blue, b = green, c = red, d = alpha;

绘制线:cv::line

第一个参数:表示绘制的目标图像的Mat对象
第二个参数:表示绘制的起点坐标的Point对象
第三个参数:表示绘制的终点坐标的Point对象
第四个参数:表示绘制线的颜色的Scalar对象
第五个参数:表示线的宽度
第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)

绘制椭圆:cv::ellipse

第一个参数:表示背景图像的Mat对象
第二个参数:表示椭圆中心点的Point对象
第三个参数:表示椭圆半径的Size对象,如Size(src.cols/4, src.rows/8)
第四个参数:表示椭圆沿椭圆中心点的顺时针方向旋转的角度
第五个参数:表示椭圆弧长绘制的开始角度
第六个参数:表示椭圆弧长绘制的结束角度
第七个参数:表示绘制线的颜色的Scalar对象
第八个参数:表示线的宽度
第九个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)

绘制矩形:cv::rectange

第一个参数:表示背景图像(画布)的Mat对象
第二个参数:表示矩形范围Rect对象,Rect对象的第一个参数表示矩形左上角顶点的x坐标,第二个参数表示矩形左上角顶点的y坐标,第三个参数表示矩形的宽度,第四个参数表示矩形的高度
第三个参数:表示绘制线的颜色的Scalar对象
第四个参数:表示线的宽度
第五个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)

绘制圆:cv::circle

第一个参数:表示背景图像(画布)的Mat对象
第二个参数:表示圆心坐标的Point对象
第三个参数:表示圆的半径
第四个参数:表示绘制线的颜色的Scalar对象
第五个参数:表示线的宽度
第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)

绘制填充多边形:cv::fillPoly

第一个参数:表示背景图像(画布)的Mat对象
第二个参数:表示要绘制的轮廓的点的Point的二级指针,有二维数组初始化
第三个参数:表示对于轮廓需要绘制的点的个数,为一位数组或者一级指针
第四个参数:绘制的轮廓数
第五个参数:表示绘制线的颜色的Scalar对象
第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)

绘制文字:cv::putText

第一个参数:表示背景图像(画布)的Mat对象

第二个参数:表示要绘制的文字内容

第三个参数:绘制文字的位置坐标的Point对象

第四个参数:待绘制文字的字体

第五个参数:待绘制文字的缩放比例

第六个参数:表示绘制线的颜色的Scalar对象

第七个参数:表示线的宽度

第八个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)

生成随机线

  • 随机数生成cv::RNG

    随机数生成器RNG rng(12345);
    生成正态分布随机数uniform(int a, int b),随机生成啊[a, b)之间的数

参考代码

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
//各个函数的声明
void myline();
void myellipse();
void myrectangle();
void mycircle();
void myfillPoly();
void myputText();
void myrng();
/*主程序进入口*/
int main()
{
    //函数的调用
    myline();
    myellipse();
    myrectangle();
    mycircle();
    myfillPoly();
    myputText();
    myrng();
    return 0;
}
/*各个函数的定义*/
//绘制直线
void myline() {
    Mat lineimage(500,500,CV_8UC3,Scalar(0,0,0));
    Scalar color=Scalar(255,0,0);
    Point p1=Point(100,100);
    Point p2=Point(300,300);
    line(lineimage,p1,p2,color,1,LINE_8);
    namedWindow("绘制直线");
    imshow("绘制直线",lineimage);
    waitKey(0);
}
//绘制椭圆
void myellipse() {
    Mat ellipseimage(500,500,CV_8UC3,Scalar(0,0,0));
    Scalar color=Scalar(255,0,0);
    Point p1=Point(ellipseimage.cols/2,ellipseimage.rows/2);
    Size size=Size(ellipseimage.cols/4,ellipseimage.rows/8);
    ellipse(ellipseimage,p1,size,0,0,360,color,1,LINE_8);
    namedWindow("绘制椭圆");
    imshow("绘制椭圆",ellipseimage);
    waitKey(0);
}
//绘制矩形
void myrectangle() {
    Mat rectangleimage(500,500,CV_8UC3,Scalar(0,0,0));
    Scalar color=Scalar(255,0,0);
    Point p1;
    p1.x=rectangleimage.cols/2;
    p1.y=rectangleimage.rows/2;
    rectangle(rectangleimage,Rect(p1.x,p1.y,100,100),color,1,LINE_8);
    namedWindow("绘制矩形");
    imshow("绘制矩形",rectangleimage);
    waitKey(0);
}
//绘制圆
void mycircle() {
    Mat circleimage(500,500,CV_8UC3,Scalar(0,0,0));
    Scalar color(255,0,0);
    Point p1=Point(circleimage.cols/2,circleimage.rows/2);
    circle(circleimage,p1,100,color,1,LINE_8);
    namedWindow("绘制圆");
    imshow("绘制圆",circleimage);
    waitKey(0);
}
//绘制填充多边形
void myfillPoly() {
    Mat fillPolyimage(500,500,CV_8UC3,Scalar(0,0,0));
    Scalar color=Scalar(255,0,0);
    Point p[4];
    p[0]=Point(100,100);
    p[1]=Point(100,300);
    p[2]=Point(200,300);
    p[3]=Point(200,100);
    const Point* pp[] = { p };
    int number[] = {4};
    fillPoly(fillPolyimage,pp,number,1,color,LINE_8);
    namedWindow("绘制填充多边形");
    imshow("绘制填充多边形",fillPolyimage);
    waitKey(0);
}
//绘制文字
void myputText() {
    Mat putTextimage(500,500,CV_8UC3,Scalar(0,0,0));
    Scalar color=Scalar(255,0,0);
    Point p1=Point(100,100);
    putText(putTextimage,"pipihan",p1,CV_FONT_HERSHEY_COMPLEX,1.0,color,1,LINE_8);
    namedWindow("绘制文字");
    imshow("绘制文字",putTextimage);
    waitKey(0);
}
//绘制随机直线
void myrng() {
    RNG rng(12345);//生成高斯随机函数
    Point p1;
    Point p2;
    Mat RNGimage(500,500,CV_8UC3,Scalar(0,0,0));
    for(int i=0;i<10;i++) {
        p1.x=rng.uniform(0,RNGimage.cols);//生成任意x坐标
        p2.x=rng.uniform(0,RNGimage.cols);
        p1.y=rng.uniform(0,RNGimage.rows);//生成任意y坐标
        p2.y=rng.uniform(0,RNGimage.rows);
        Scalar color=Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));//随机生成颜色
        line(RNGimage,p1,p2,color,1,LINE_8);//画直线
    }
    namedWindow("绘制随机直线");
    imshow("绘制随机直线",RNGimage);
    waitKey(0);
}

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/pipihan21/article/details/105271831
今日推荐