Opencv(C++)笔记--绘制直线、矩形、椭圆、圆、填充多边形、绘制字体和随机产生坐标点

这篇具有很好参考价值的文章主要介绍了Opencv(C++)笔记--绘制直线、矩形、椭圆、圆、填充多边形、绘制字体和随机产生坐标点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1--cv::line()绘制直线

2--cv::Rect()绘制矩形

3--cv::ellipse()绘制椭圆

4--cv::circle()绘制圆

5--cv::fillPoly()填充多边形

6--cv::putText()绘制字体

6--cv::RNG随机产生坐标点


1--cv::line()绘制直线

使用 cv::Point p1 定义坐标点;

使用 cv::line() 绘制直线,传入的参数依次为:背景图、两个点的坐标、直线的颜色、直线的线宽和直线的线型;

#include <opencv2/opencv.hpp>

// 绘制线
void MyLines(cv::Mat bgImg){
    cv::Point p1 = cv::Point(20, 30); // 两种定义点的方式
    cv::Point p2; 
    p2.x = 300;
    p2.y = 300;
    cv::Scalar color = cv::Scalar(0, 0, 255); // 定义红色
    cv::line(bgImg, p1, p2, color, 1, cv::LINE_8); // 在背景图绘画直线

}

2--cv::Rect()绘制矩形

使用 cv::Rect() 绘制矩形,传入的参数依次为:背景图、矩形框、颜色、线宽和线型;

#include <opencv2/opencv.hpp>

// 绘制矩形
void MyRectangle(cv::Mat bgImg){
    cv::Rect rect = cv::Rect(200, 100, 150, 150); // 定义一个矩形(左上角x,左上角y,宽,高)
    cv::Scalar color = cv::Scalar(255, 0, 0); // 蓝色
    cv::rectangle(bgImg, rect, color, 2, cv::LINE_8); // 在背景图绘画矩形
}

3--cv::ellipse()绘制椭圆

使用 cv::ellipse() 绘制椭圆,可通过改变弧段开始角度弧段结束角度来绘制特定的弧度,例如半弧弧段开始角度可以为0,弧段结束角度为180;

#include <opencv2/opencv.hpp>

// 绘制椭圆
void MyEllipse(cv::Mat bgImg){
    cv::Point c_point = cv::Point(bgImg.cols / 2, bgImg.rows / 2); // 椭圆中心点
    cv::Scalar color = cv::Scalar(0, 255, 0); // 绿色
    // 背景图,中心点,长短轴axes, 起始角度, 弧段开始角度,弧段结束角度,颜色,线宽,线型
    cv::ellipse(bgImg, c_point, cv::Size(bgImg.cols / 4, bgImg.rows / 8), 90, 0, 360, color, 2, cv::LINE_8);
}

4--cv::circle()绘制圆

使用 cv::circle() 绘制圆,传入的参数依次为:背景图、中心点、半径、颜色、线宽和线型;

#include <opencv2/opencv.hpp>

// 绘制圆
void MyCircle(cv::Mat bgImg){
    cv::Scalar color = cv::Scalar(0, 255, 255);
    cv::Point c_point = cv::Point(bgImg.cols / 2, bgImg.rows / 2);
    // 背景图,中心点,半径,颜色,线宽,线型
    cv::circle(bgImg, c_point, 150, color, 2, cv::LINE_8);
}

实例展示绘制直线、矩形、椭圆和圆:

#include <opencv2/opencv.hpp>
#include <cstdio>
using namespace std;

// 绘制线
void MyLines(cv::Mat bgImg){
    cv::Point p1 = cv::Point(20, 30); // 两种定义点的方式
    cv::Point p2; 
    p2.x = 300;
    p2.y = 300;
    cv::Scalar color = cv::Scalar(0, 0, 255); // 定义红色
    cv::line(bgImg, p1, p2, color, 1, cv::LINE_8); // 在背景图绘画直线

}
// 绘制矩形
void MyRectangle(cv::Mat bgImg){
    cv::Rect rect = cv::Rect(200, 100, 150, 150); // 定义一个矩形(左上角x,左上角y,宽,高)
    cv::Scalar color = cv::Scalar(255, 0, 0); // 蓝色
    cv::rectangle(bgImg, rect, color, 2, cv::LINE_8); // 在背景图绘画矩形
}

// 绘制椭圆
void MyEllipse(cv::Mat bgImg){
    cv::Point c_point = cv::Point(bgImg.cols / 2, bgImg.rows / 2); // 椭圆中心点
    cv::Scalar color = cv::Scalar(0, 255, 0); // 绿色
    // 背景图,中心点,长短轴axes, 起始角度, 弧段开始角度,弧段结束角度,颜色,线宽,线型
    cv::ellipse(bgImg, c_point, cv::Size(bgImg.cols / 4, bgImg.rows / 8), 90, 0, 360, color, 2, cv::LINE_8);
}

// 绘制圆
void MyCircle(cv::Mat bgImg){
    cv::Scalar color = cv::Scalar(0, 255, 255);
    cv::Point c_point = cv::Point(bgImg.cols / 2, bgImg.rows / 2);
    // 背景图,中心点,半径,颜色,线宽,线型
    cv::circle(bgImg, c_point, 150, color, 2, cv::LINE_8);
}


int main(int argc, char** argv){
    cv::Mat src;
    src = cv::imread("./test1.jpg");
    if (src.empty()){
        printf("could not load image..\n");
        return -1;
    }
    cv::namedWindow("input");
    cv::imshow("input", src);

    MyLines(src); // 绘制直线
    MyRectangle(src); // 绘制矩形
    MyEllipse(src); // 绘制椭圆
    MyCircle(src); // 绘制圆

    cv::namedWindow("output");
    cv::imshow("output", src);
    cv::waitKey(0);
    return 0;
}

c++ 创建cv::point,Opencv(C++)学习笔记,opencv,c++,计算机视觉

5--cv::fillPoly()填充多边形

使用 cv::fillPoly() 填充多边形,传入的参数依次为:背景图、点的坐标、点的个数、线宽、颜色和线型;

多边形的形状为:依次连接每一个点,最后一个点与第一个点进行相连,构成的多边形;在下图实例中展示了填充一个五边形的依次连接顺序;

6--cv::putText()绘制字体

使用 cv::putText() 绘制字体,传入的参数依次为:背景图、要绘制的字体内容、文本框左下角坐标、字体、尺寸因子(值越大字体越大)、颜色、线宽和线型;

实例展示填充多边形和绘制字体:

#include <opencv2/opencv.hpp>
#include <cstdio>
using namespace std;

// 填充多边形
void MyPolygon(cv::Mat bgImg){
    cv::Point pts[1][5];
    pts[0][0] = cv::Point(50, 50);
    pts[0][1] = cv::Point(50, 150);
    pts[0][2] = cv::Point(150, 150);
    pts[0][3] = cv::Point(150, 50);
    pts[0][4] = cv::Point(70, 30);

    const cv::Point* ppts[] = {pts[0]};
    int npt[] = {5};
    cv::Scalar color = cv::Scalar(255, 12, 255);
    // ppts每个坐标点依次相连,第一个点和最后一个点相连,构成的多边形
    cv::fillPoly(bgImg, ppts, npt, 1, color, 8); // 根据坐标点填充多边形
}


int main(int argc, char** argv){
    cv::Mat src;
    src = cv::imread("./test1.jpg");
    if (src.empty()){
        printf("could not load image..\n");
        return -1;
    }
    cv::namedWindow("input");
    cv::imshow("input", src);

    MyPolygon(src);
    cv::putText(src, "Hello OpenCV", cv::Point(100, 300), cv::FONT_HERSHEY_COMPLEX, 1.0, cv::Scalar(12, 23, 200), 3, cv::LINE_8);
    cv::namedWindow("output");
    cv::imshow("output", src);
    cv::waitKey(0);
    return 0;
}

c++ 创建cv::point,Opencv(C++)学习笔记,opencv,c++,计算机视觉

6--cv::RNG随机产生坐标点

使用 cv::RNG 产生随机数;cv::RNG rng(12345) 中的 12345 表示随机种子,当固定种子时,每次运行产生的随机数相同;

以下实例根据传入的图片大小,初始化生成一个全黑的图片,在图片中随机生成坐标点绘画100条直线:

#include <opencv2/opencv.hpp>
#include <cstdio>
using namespace std;

void RamdomLineDemo(cv::Mat bgImg){
    cv::RNG rng(12345);
    cv::Point pt1;
    cv::Point pt2;
    cv::Mat bg = cv::Mat::zeros(bgImg.size(), bgImg.type());
    cv::namedWindow("random line demo");
    for (int i = 0; i < 100; i++){
        pt1.x = rng.uniform(0, bgImg.cols); // 随机生成点的坐标
        pt2.x = rng.uniform(0, bgImg.cols);
        pt1.y = rng.uniform(0, bgImg.rows);
        pt2.y = rng.uniform(0, bgImg.rows);
        cv::Scalar color = cv::Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); // 随机生成颜色
        if (cv::waitKey(50) > 0){
            break;
        }
        cv::line(bg, pt1, pt2, color, 1, cv::LINE_8);
        cv::imshow("random line demo", bg);
    }
}

int main(int argc, char** argv){
    cv::Mat src;
    src = cv::imread("./test1.jpg");
    if (src.empty()){
        printf("could not load image..\n");
        return -1;
    }
    cv::namedWindow("input");
    cv::imshow("input", src);
    RamdomLineDemo(src);
    cv::waitKey(0);
    return 0;
}

c++ 创建cv::point,Opencv(C++)学习笔记,opencv,c++,计算机视觉

 文章来源地址https://www.toymoban.com/news/detail-626911.html

到了这里,关于Opencv(C++)笔记--绘制直线、矩形、椭圆、圆、填充多边形、绘制字体和随机产生坐标点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用OpenCV的函数polylines()绘制多条相连的线段和多边形;使用函数fillPoly()绘制带填充效果的多边形

    函数polylines()可用来根据点集绘制多条相连的线段,也可用来绘制多边形。 函数polylines()有两种原型,这里只向大家介绍比较常用的那种原型。 函数polylines()的C++原型如下: 函数polylines()的Python原型如下: 函数polylines()的参数意义如下: img—绘制的多条相连线段或多边形所在

    2024年02月04日
    浏览(63)
  • OpenCV-Python学习(13)—— OpenCV 多边形填充与绘制(cv.fillPoly、cv.polylines)

    1. 知识点 学习 cv.polylines 函数的使用; 学习 cv.fillPoly 函数的使用。 2. 绘制折线或多边形 cv.polylines 函数说明 2.1 函数使用 2.2 参数说明 参数 说明 img 表示要在其上绘制矩形的图像的img对象。 pts 表示一个或多个点集。 isClosed 表示标志,决定所绘制的多边形是否闭合。若为 T

    2024年02月16日
    浏览(54)
  • cesium学习记录08-鼠标绘制实体(点,线,矩形,圆,多边形)

    上一篇学习了创建实体的一些基础知识,但有时还需要我们使用鼠标进行手动绘制,这一篇就来进行鼠标绘制实体的实现(点,线,矩形,圆,多边形)。 (这里需要掌握三个知识点,一是上一篇中的创建实体、二是鼠标事件、三是回调函数) 既然是鼠标绘制,自然离不开

    2024年02月12日
    浏览(58)
  • Python:opencv画点、圆、线、多边形、矩形

    简介 :机器学习视觉方向一般都需要在图像中添加标注框,标注框有着很大的用处,特别是对图像中某些需要关注的特征起到圈定的效果,方便对特征选择进行处理。 相关攻略: 机器学习:基本流程 Python:调用摄像头使用cv2库录制视频 Python:视频拆分成一帧一帧的图片

    2024年02月04日
    浏览(86)
  • 计算机图形学实验——利用MFC对话框实现多边形绘制与填充(扫描线填充算法)附源码

    内容概括: 利用基于对话框的MFC项目 实现鼠标点击绘制多边形 实现扫描线算法填充多边形 源码见Yushan-Ji/ComputerGraphics: ECNU2023秋 计算机图形学课程实验代码 (github.com) 通过鼠标交互输入多边形 对各种多边形进行填充,包括边界自交的情况 利用 OnLButtonDown 和 OnRButtonDown 函数,

    2024年02月04日
    浏览(70)
  • 使用c#实现一个简单绘图软件(绘制矩形、多边形,画笔、橡皮擦功能)的完整教程

    c#是微软提供的用于开发windows软件的开发语言,可以使用其快速的实现windows桌面软件的开发。这里基于C#开发了一款简单的绘图软件,可以用于绘制矩形、多边形的绘制(基于这些可以实现自己的数据标注软件),还实现了画笔、橡皮擦功能。开发C#软件通常使用Visual Studio软

    2024年02月03日
    浏览(59)
  • OpenCV(10): 轮廓近似—多边形拟合,边界矩形与边界圆形

    轮廓近似(Contour Approximation)是指对轮廓进行逼近或拟合,得到近似的轮廓。在图像处理中,轮廓表示了图像中物体的边界,因此轮廓近似可以用来描述和识别物体的形状。 多边形拟合(Approximating Polygons)是将轮廓逼近成一个由直线段构成的多边形。常见的有最小包围矩形

    2024年02月10日
    浏览(45)
  • [C++] opencv - fillPoly(填充多边形)函数介绍和使用场景

    fillPoly() 函数是OpenCV中用于绘制填充多边形的函数。函数原型如下: fillPoly() 函数适用于需要绘制填充多边形的场景,例如在图像上绘制一个封闭的图形、制作一个简单的遮罩等。   fillPoly() 函数是OpenCV中用于绘制填充多边形的函数。可以用来绘制实心三角形,实心矩形,实

    2024年02月19日
    浏览(114)
  • OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合

    目录 1.轮廓外接最大矩形boundingRect() 2.轮廓外接最小矩形minAreaRect() 3.轮廓外接多边形approxPolyDP() 1.轮廓外接最大矩形boundingRect() Rect cv::boundingRect ( InputArray array ) array:输入的灰度图像或者2D点集,数据类型为vectorPoint或者Mat。 示例代码:  轮廓外接最大矩形的结果: 2.轮廓外接

    2024年02月09日
    浏览(63)
  • 基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

    使用基于C++的OpenCV库来绘制多边形,并且为多边形的不同边使用不同的颜色,可以按照以下步骤进行操作: 首先,确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件: 创建一个空白的图像,然后绘制多边形,并为每条边选择不同的颜色: 在这个示例中,

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包