0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV(C++)创建图片绘制图形(矩形、圆、文字、线段等等)

DS小龙哥-嵌入式技术 来源: DS小龙哥-嵌入式技术 作者: DS小龙哥-嵌入式技 2023-06-07 09:19 次阅读

一、OpenCV介绍

OpenCV 是基于开源许可证的跨平台计算机视觉库,提供了一组丰富、广泛的图像处理和计算机视觉算法。OpenCV 支持多种编程语言,包括 C++PythonJava 等,可以运行在 Linux、Windows、Mac OS 等平台上。

OpenCV 能够在图像上绘制各种几何形状、文本和曲线,以及对图像进行调整、裁剪和旋转等操作,这些功能都为图像的分析和处理提供了很大的帮助。

以下是 OpenCV 可以绘制图像的一些应用:

(1)图像标注:在图像上添加标注或者注释,例如在目标检测或者图像分类任务中,通过在图像上绘制框、标签信息来标记检测到的目标。

(2)处理后显示:例如在图像处理过程中,可以在处理前和处理后的图像上绘制对比图,直观地显示图像处理的效果。

(3)实时显示:通过持续不断地在屏幕上绘画来实现实时显示效果,例如在视频处理中输出处理后的视频流并将其实时渲染在屏幕上。

二、绘制图形

【1】绘制图形弹窗显示

下面代码实现的功能:

使用 OpenCV(C++) 新建一张透明图片,在图片里绘制一个矩形、一条直线、一段文字、一个圆。

// 创建一张大小为 512x512,具有 alpha 通道的透明图片
 cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0));
 ​
 // 在图片上绘制一个矩形
 cv::rectangle(img, cv::Point(50, 50), cv::Point(200, 150), cv::Scalar(255, 0, 0, 255), -1);
 ​
 // 在图片上绘制一条直线
 cv::line(img, cv::Point(300, 100), cv::Point(450, 100), cv::Scalar(0, 255, 0, 255), 3);
 ​
 // 在图片上绘制一段文本
 std::string text = "Hello, OpenCV!";
 cv::putText(img, text, cv::Point(50, 300), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255, 255), 2);
 ​
 // 在图片上绘制一个圆
 cv::circle(img, cv::Point(400, 350), 50, cv::Scalar(255, 255, 0, 255), -1);
 ​
 // 显示图片
 cv::imshow("image", img);
 cv::waitKey(0);

cv::Mat 是 OpenCV 中表示图像的数据结构,它可以存储多通道的图像。

cv::Scalar 是一个四通道的实数向量,用于表示像素点的颜色和 alpha 值。

cv::Point 是一个二维整型向量,用于表示像素点的坐标。

cv::rectangle 函数用于在图片上绘制矩形。

cv::line 函数用于在图片上绘制直线。

cv::putText 函数用于在图片上绘制文本。

cv::circle 函数用于在图片上绘制圆。

【2】绘制图形保存到本地

// 创建一张大小为 512x512,具有 alpha 通道的透明图片
 cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0));
 ​
 // 在图片上绘制一个矩形
 cv::rectangle(img, cv::Point(50, 50), cv::Point(200, 150), cv::Scalar(255, 0, 0, 255), -1);
 ​
 // 在图片上绘制一条直线
 cv::line(img, cv::Point(300, 100), cv::Point(450, 100), cv::Scalar(0, 255, 0, 255), 3);
 ​
 // 在图片上绘制一段文本
 std::string text = "Hello, OpenCV!";
 cv::putText(img, text, cv::Point(50, 300), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255, 255), 2);
 ​
 // 在图片上绘制一个圆
 cv::circle(img, cv::Point(400, 350), 50, cv::Scalar(255, 255, 0, 255), -1);
 ​
 // 保存图片到本地
 cv::imwrite("output.png", img);

三、函数功能介绍

【1】绘制直线

cv::line 函数用于在图像上绘制一条直线,其参数如下:

void cv::line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
               int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
  • img: 输入输出参数,表示待绘制的目标图像。

  • pt1: 输入参数,表示的是直线的起点坐标,是一个 cv::Point 类型的对象。

  • pt2: 输入参数,表示的是直线的终点坐标,也是一个 cv::Point 类型的对象。

  • color: 输入参数,表示绘制直线的颜色以及透明度,是一个 cv::Scalar 类型的对象。常见的颜色有:红色(0, 0, 255)、绿色(0, 255, 0)、蓝色(255, 0, 0)等。

  • thickness: 可选参数,表示绘制直线的宽度。默认值为 1 表示绘制一个像素宽度的直线,如果设置为负值,则表示绘制一条填充直线。

  • lineType
    

    : 可选参数,表示直线的类型,可以取以下几个值:

    • cv::LINE_4: 表示绘制一条 4 连通的直线,默认值。
    • cv::LINE_8: 表示绘制一条 8 连通的直线。
    • cv::LINE_AA: 表示绘制一条抗锯齿的直线。
  • shift: 可选参数,表示坐标点像素值所占用的位数,默认为 0。

【2】绘制圆

cv::circle 函数用于在图像上绘制一个圆,其参数如下:

void cv::circle(InputOutputArray img, Point center, int radius, const Scalar& color,
                 int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
  • img: 输入输出参数,表示待绘制的目标图像。

  • center: 输入参数,表示圆心坐标,是一个 cv::Point 类型的对象。

  • radius: 输入参数,表示圆的半径。

  • color: 输入参数,表示绘制圆的颜色以及透明度,是一个 cv::Scalar 类型的对象。

  • thickness: 可选参数,表示圆线条的宽度。默认值为 1 表示绘制一个像素宽度的圆,如果设置为负值,则表示绘制一条填充的圆。

  • lineType
    

    : 可选参数,表示圆边界的类型,可以取以下几个值:

    • cv::LINE_4: 表示绘制四个相邻的点的圆边界,默认值。
    • cv::LINE_8: 表示绘制八个相邻的点的圆边界。
    • cv::LINE_AA: 表示绘制抗锯齿的圆边界。
  • shift: 可选参数,表示坐标点像素值所占用的位数,默认值为 0。

【3】绘制矩形

cv::rectangle 函数用于在图像上绘制一个矩形,其参数如下:

void cv::rectangle(InputOutputArray img, Rect rect, const Scalar& color,
                    int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
  • img: 输入输出参数,表示待绘制的目标图像。

  • rect: 输入参数,表示矩形,是一个 cv::Rect 类型的对象,可以通过传递左上角和右下角坐标的方式来定义一个矩形。

  • color: 输入参数,表示绘制矩形的颜色以及透明度,是一个 cv::Scalar 类型的对象。

  • thickness: 可选参数,表示矩形边框的宽度。默认值为 1 表示绘制一个像素宽度的矩形,如果设置为负值,则表示绘制一条填充的矩形。

  • lineType
    

    : 可选参数,表示矩形边框的类型,可以取以下几个值:

    • cv::LINE_4: 表示绘制四个相邻的点的矩形边框,默认值。
    • cv::LINE_8: 表示绘制八个相邻的点的矩形边框。
    • cv::LINE_AA: 表示绘制抗锯齿的矩形边框。
  • shift: 可选参数,表示坐标点像素值所占用的位数,默认值为 0。

【4】绘制文本

cv::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);
  • img: 输入输出参数,表示待绘制的目标图像。

  • text: 输入参数,表示要绘制的文本字符串。

  • org: 输入参数,表示文本框左下角的坐标点,是一个 cv::Point 类型的对象。

  • fontFace
    

    : 输入参数,表示字体类型,可以取以下几个值:

    • cv::FONT_HERSHEY_COMPLEX: 复杂风格字体。
    • cv::FONT_HERSHEY_COMPLEX_SMALL: 小字号复杂风格字体。
    • cv::FONT_HERSHEY_DUPLEX: 双线条字体。
    • cv::FONT_HERSHEY_PLAIN: 单线条字体。
    • cv::FONT_HERSHEY_SIMPLEX: 正常大小的字体。
    • cv::FONT_HERSHEY_TRIPLEX: 三线条字体。
  • fontScale: 输入参数,表示字体大小缩放比例。

  • color: 输入参数,表示绘制文本的颜色以及透明度,是一个 cv::Scalar 类型的对象。

  • thickness: 可选参数,表示文本轮廓线条的宽度。默认值为 1 表示绘制一个像素宽度的文本,如果设置为负值,则表示绘制一条填充的文本。

  • lineType
    

    : 可选参数,表示文本边界的类型,可以取以下几个值:

    • cv::LINE_4: 表示绘制四个相邻的点的文本边界,默认值。
    • cv::LINE_8: 表示绘制八个相邻的点的文本边界。
    • cv::LINE_AA: 表示绘制抗锯齿的文本边界。
  • bottomLeftOrigin: 可选参数,表示坐标点是否为文本框左下角的坐标点,默认值为 false,表示坐标点为文本框左上角的坐标点。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    103003
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72901
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40792
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476
收藏 人收藏

    评论

    相关推荐

    推荐几个去掉图片上的文字的技巧!!

     推荐几个去掉图片上的文字的技巧!!1、使用仿制图章工具去除文字。 这是比较常用的方法。具体的操作是,选取仿制图章工具,按住 Al
    发表于 06-02 18:08

    VC绘制图形的示例(含源代码)

    VC绘制图形的示例(含源代码) [hide][/hide]
    发表于 05-10 10:13

    【安富莱】【STemWin教程】第10章 2-D图形库之绘制图形

    `第10章 2-D图形库之绘制图形 本期主要讲解2-D图形库的图形绘制,包括绘制多边形,
    发表于 03-25 11:21

    第10章 2-D图形库之绘制图形

    转stemwin教程本期主要讲解2-D图形库的图形绘制,包括绘制多边形,绘制
    发表于 10-12 10:13

    国产CAD制图软件中闭合命令的使用技巧

    在使用浩辰CAD制图软件绘制图纸的过程中,如果存在不闭合的图形,有些操作就会无法进行,比如在填充时候则需要填充区域是封闭的。那么怎么才能将图形闭合呢?接下来和小编一起来看看国产CAD浩
    发表于 08-11 15:10

    机械CAD制图软件入门教程:绘制倒角/

    在使用浩辰机械CAD制图软件绘制图纸的过程中,如何才能快速的对一些倒角/倒进行处理呢?下面就和小编一起来看看浩辰机械CAD制图软件中快速绘制
    发表于 10-13 14:51

    怎么在CAD中创建异形视口?CAD异形视口创建教程

    ,即可创建异形视口。创建方法四:绘制图形的视口剪裁在使用「视口剪裁」时,除了选择提前绘制好的图形,我们还可以直接
    发表于 04-08 17:14

    C语言绘制图像梯度图原理介绍

    *2401、采集原始图像配置ESP32输出灰度图,像素太高无法存储及处理。320*240= 75K。2、图像梯度计算参考代码:C语言绘制图像梯度图 原理介绍:图像的梯度 h...
    发表于 01-11 06:36

    如何将单片机摄像头读取回传的RGB数组绘制图片

    咚咚咚的关于使用Matlab————将单片机摄像头读取回传的RGB数组绘制图片(一)效果展示(二)源码分享(三)需要改进的地方及不足(一)效果展示(二)源码分享(Excel部分函数)=HEX2BIN
    发表于 01-20 07:13

    如何使用emWin的API绘制图形

    应用程序: 此示例代码使用 emWin 的 API 绘制图形, 可以用作按钮, 更改面板上文字编辑的值 。 BSP 版本:M480系列BSP CMSIS V3.03.001 硬件
    发表于 08-23 07:37

    M480使用emWin的API绘制图形

    应用程序: 此示例代码使用 emWin 的 API 绘制图形, 可以用作按钮, 更改面板上文字编辑的值 。 BSP 版本:M480系列BSP CMSIS V3.03.001 硬件
    发表于 08-30 08:58

    C#教程之图片绘制文字

    C#教程之图片绘制文字,很好的C#资料,快来学习吧。
    发表于 04-20 11:13 5次下载

    查找和绘制图片轮廓矩

    OpenCV3编程入门》书本配套源代码:查找和绘制图片轮廓矩
    发表于 06-06 15:20 3次下载

    OpenCV3编程入门-源码例程全集-查找和绘制图片轮廓矩

    OpenCV3编程入门-源码例程全集-查找和绘制图片轮廓矩
    发表于 09-17 22:54 2次下载

    手动版实现带箭头的线段绘制

    我根据一个矩形进行了各种角度旋转,就想通过绘制一个带方向的线段表示它,通过旋转矩阵很容易的获取了两个点坐标,但是很快遇到了一个新问题,怎么绘制那个箭头,就是带箭头的
    的头像 发表于 05-17 11:24 1496次阅读