opencv绘制图形

// 绘制图形.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
using namespace std;


void drawLine(Mat &img); //函数声明
void drawRect(Mat &img); //矩形
void drawEllipse(Mat &img); //画椭圆 
void drawCircle(Mat &img); //画圆
void drawPloy(Mat &img); //绘制填充
void drawText(Mat &img); //绘制文字
void drawRadomLine(Mat &img);
int main()
{
    Mat src, dest;

    src = imread("test.jpg");
    dest = Mat::zeros(src.size(), src.type());
    if (src.empty()) {
        return -1;
    }
    drawLine(src);
    drawRect(src);
    drawEllipse(src);
    drawCircle(src);
    drawPloy(src);
    drawText(src);
    drawRadomLine(src);
    namedWindow("src", CV_WINDOW_AUTOSIZE);
    imshow("src", src);



    waitKey();
    return 0;
}

//画线
void drawLine(Mat &img) {
    if (img.empty()) {
        return;
    }
    Point p1 = Point(20, 30); //创建点的坐标
    Point p2(30, 50); //另一个点的坐标
    Scalar color = Scalar(0, 0, 255); // bgr 红色
    //参数1:输入图像 
    //参数2:起始点坐标
    //参数3:结束点坐标
    //参数4:线的颜色
    //参数5:表示线宽
    //参数6:LINE_AA表示抗锯齿
    line(img, p1, p2, color, 1, LINE_AA);

}
//画矩形
void drawRect(Mat &img) {
    if (img.empty()) {
        return;
    }
    Point p1 = Point(40, 60);
    Point p2 = Point(100, 150);
    Rect rect = Rect(p1, p2);
    Scalar color = Scalar(255, 0, 0);
    //参数1:输入图像 
    //参数2:矩形
    //参数3:线的颜色
    //参数4:线宽
    //参数5:LINE_AA表示抗锯齿
    rectangle(img, rect, color, 3, LINE_8);


}


//绘制椭圆
void drawEllipse(Mat &img) {
    if (!img.data) {
        return;
    }
    Scalar color = Scalar(0, 255, 0);
    //参数1:输入图像 
    //参数2:椭圆的中心点
    //参数3:椭圆的长轴和短轴,其中第一个为x轴,第二个参数为y轴
    //参数4:椭圆的旋转角度
    //参数5:椭圆的开始绘制的角度(开始点为右边垂直方向上的中心点,然后逆时针方向绘制)
    //参数6:椭圆的结束角度
    //参数7:椭圆的颜色 Scalar
    //参数8:线宽
    //参数9:线的类型,LINE_AA为抗锯齿
    ellipse(img, Point(img.cols / 2, img.rows / 2), Size(img.cols / 4, img.rows / 8), 0, 30, 360, color, 2, LINE_8);

}

//绘制圆
void drawCircle(Mat &img) {
    Point o = Point(120, 200);
    Scalar color = Scalar(0, 255, 255); //bgr
    //参数1:输入图像 
    //参数2:圆心
    //参数3:圆半径
    //参数4:线色
    //参数5:线宽
    //参数6:抗锯齿
    circle(img, o, 100, color, 2, LINE_AA);

}
//绘制多变形并填充颜色
void drawPloy(Mat &img) {
    Point pts[1][5]; //多边形的点
    pts[0][0] = { 100,100 };
    pts[0][1] = { 100,200 };
    pts[0][2] = { 200,200 };
    pts[0][3] = { 200,100 };
    pts[0][4] = { 100,100 };
    const Point *ppts[] = { pts[0] }; //指向数组的指针
    int npts[] = { 5 };
    Scalar color = Scalar(255, 11, 255);
    fillPoly(img, ppts, npts, 1, color, LINE_8);

}

void drawText(Mat &img) {
    //参数1:输入图像 
    //参数2:文字的起始点(第一个文字的左边基准线位值点,四线三格的三条线为)
    //参数3:字体
    //参数4:字体缩放 1.0表示不缩放
    //参数5:字体颜色
    //参数6:字体的粗细 1表示字体原始粗细
    //参数6:表示字体是否抗锯齿
    putText(img, "hello openCV", Point(100, 200), CV_FONT_HERSHEY_COMPLEX_SMALL, 1.0, Scalar(250, 30, 100), 1, LINE_AA);
}

//画随机线
void drawRadomLine(Mat &img) {
    RNG rng(1122);  //创建随机数对象,1122为种子数,最好以时间为种子
    Point p1, p2;
    Mat dest = Mat::zeros(img.size(), img.type());

    for (int i = 0; i < 100; i++) { //随机画100条线

        p1.x = rng.uniform(0, img.cols);  //使随机数产生的范围为0和img.cols之间;
        p1.y = rng.uniform(0, img.rows);

        //p2.x = p1.x;
        //p2.y = p1.y;
        p2.x = rng.uniform(0, img.cols);
        p2.y = rng.uniform(0, img.rows);
        Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));

        if (waitKey(50) > 0) {
            break;
        }
        line(dest, p1, p2, color, 1, LINE_8);
        namedWindow("test", CV_WINDOW_AUTOSIZE);
        imshow("test", dest);
    }

}

预览效果图:这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楚蕊博南谭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值