OpenCV6-图形绘制

OpenCV6-图形绘制

    • 1.绘制圆形
    • 2.绘制直线
    • 3.绘制椭圆
    • 4.绘制多边形
    • 5.文字生成
    • 6.demo


1.绘制圆形

void cv::circle(InputOutputArray img,  // 需要绘制圆形的图像Point center,          // 圆心坐标int radius,            // 半径,单位为像素const Scalar& color,   // 圆形颜色int thickness = 1,     // 轮廓宽度,如果数值为负,则绘制一个实心圆int lineType = LINE_8, // 边界的类型,可取值FILLED、LINE_4、LINE_8、LINE_AAint shift = 0          // 中心坐标和半径数值中的小数位数
);// example
circle(img, Point(50, 50), 25, Scalar(255, 255, 255), -1);  //绘制一个实心圆
circle(img, Point(100, 50), 20, Scalar(255, 255, 255), 4);  //绘制一个空心圆

2.绘制直线

void line(InputOutputArray img,   Point pt1, Point pt2,  // 直线起点和终点const Scalar& color,   // 直线颜色,三通道表示int thickness = 1, int lineType = LINE_8, int shift = 0
);line(img, Point(100, 100), Point(200, 100), Scalar(255, 255, 255), 2, LINE_4, 0);  //绘制一条直线

3.绘制椭圆

void 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
);

在OpenCV中还提供了ellipse2Poly函数用于输出椭圆边界的像素坐标,但是不会在图像中绘制椭圆:

void ellipse2Poly( Point center, Size axes, int angle,int arcStart, int arcEnd, int delta,  // 后续折线顶点之间的角度,他定义了近似精度CV_OUT std::vector<Point>& pts // 椭圆边缘像素坐标向量集合
);
/*
该函数与绘制椭圆所需的参数类似,只不过不再将椭圆输出到图像中,而是通过vector(向量)将椭圆边缘的坐标点存储起来,便于后续的再处理。
*/

4.绘制多边形

矩形的绘制:

void rectangle(nputOutputArray img, Point pt1, // 左上角Point pt2, // 右下角const Scalar& color,   int thickness = 1,int lineType = LINE_8, int shift = 0
);void rectangle(InputOutputArray img, Rect rec, // 矩形const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0);typedef Rect2i Rect;
typedef Rect_<int> Rect2i;template<typename _Tp> class Rect_
{
public:// ..._Tp x; //!< x coordinate of the top-left corner_Tp y; //!< y coordinate of the top-left corner_Tp width; //!< width of the rectangle_Tp height; //!< height of the rectangle
};

下面是绘制多边形的方法:可以一次绘制多个多边形。

void fillPoly(InputOutputArray img, const Point** pts,  // 多边形顶点数组。存放多个多边形顶点坐标的数组。const int* npts,    // 每个多边形顶点数组中顶点的个数int ncontours,      // 绘制多边形的个数const Scalar& color, int lineType = LINE_8, int shift = 0,Point offset = Point() // 所有顶点的可选偏移
);

5.文字生成

目前只支持英文文本的输出。

void 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,则原点为左下角。
);/*
FONT_HERSHEY_SIMPLEX:正常大小的无衬线文字
FONT_HERSHEY_PLAIN:小尺寸无衬线文字
FONT_ITALIC:斜体字体
*/
// fontFace字体类型
enum HersheyFonts {FONT_HERSHEY_SIMPLEX        = 0, //!< normal size sans-serif fontFONT_HERSHEY_PLAIN          = 1, //!< small size sans-serif fontFONT_HERSHEY_DUPLEX         = 2, //!< normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX)FONT_HERSHEY_COMPLEX        = 3, //!< normal size serif fontFONT_HERSHEY_TRIPLEX        = 4, //!< normal size serif font (more complex than FONT_HERSHEY_COMPLEX)FONT_HERSHEY_COMPLEX_SMALL  = 5, //!< smaller version of FONT_HERSHEY_COMPLEXFONT_HERSHEY_SCRIPT_SIMPLEX = 6, //!< hand-writing style fontFONT_HERSHEY_SCRIPT_COMPLEX = 7, //!< more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEXFONT_ITALIC                 = 16 //!< flag for italic font
};

6.demo

#include <opencv2\opencv.hpp>
#include <opencv2/core/utils/logger.hpp> // debug no log
#include <iostream>
using namespace cv;
using namespace std;int main()
{cout << "OpenCV Version: " << CV_VERSION << endl;utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);Mat img = Mat::zeros(Size(512, 512), CV_8UC3);  //生成一个黑色图像用于绘制几何图形//绘制圆形circle(img, Point(50, 50), 25, Scalar(255, 255, 255), -1);  //绘制一个实心圆circle(img, Point(100, 50), 20, Scalar(255, 255, 255), 4);  //绘制一个空心圆//绘制直线line(img, Point(100, 100), Point(200, 100), Scalar(255, 255, 255), 2, LINE_4, 0);  //绘制一条直线//绘制椭圆ellipse(img, Point(300, 255), Size(100, 70), 0, 0, 100, Scalar(255, 255, 255), -1);  //绘制实心椭圆的一部分ellipse(img, RotatedRect(Point2f(150, 100), Size2f(30, 20), 0), Scalar(0, 0, 255), 2);  //绘制一个空心椭圆vector<Point> points;ellipse2Poly(Point(200, 400), Size(100, 70), 0, 0, 360, 2, points);  //用一些点来近似一个椭圆for (int i = 0; i < points.size() - 1; i++)  //用直线把这个椭圆画出来{if (i == points.size() - 1){line(img, points[0], points[i], Scalar(255, 255, 255), 2);  //椭圆中后于一个点与第一个点连线break;}line(img, points[i], points[i + 1], Scalar(255, 255, 255), 2);  //当前点与后一个点连线}//绘制矩形rectangle(img, Point(50, 400), Point(100, 450), Scalar(125, 125, 125), -1);rectangle(img, Rect(400, 450, 60, 50), Scalar(0, 125, 125), 2);//绘制多边形Point pp[2][6];pp[0][0] = Point(72, 200);pp[0][1] = Point(142, 204);pp[0][2] = Point(226, 263);pp[0][3] = Point(172, 310);pp[0][4] = Point(117, 319);pp[0][5] = Point(15, 260);pp[1][0] = Point(359, 339);pp[1][1] = Point(447, 351);pp[1][2] = Point(504, 349);pp[1][3] = Point(484, 433);pp[1][4] = Point(418, 449);pp[1][5] = Point(354, 402);Point pp2[5];pp2[0] = Point(350, 83);pp2[1] = Point(463, 90);pp2[2] = Point(500, 171);pp2[3] = Point(421, 194);pp2[4] = Point(338, 141);const Point* pts[3] = { pp[0],pp[1],pp2 };  //pts变量的生成int npts[] = { 6,6,5 };  //顶点个数数组的生成fillPoly(img, pts, npts, 3, Scalar(125, 125, 125), 8);  //绘制3个多边形//生成文字putText(img, "Learn OpenCV 4", Point(100, 400), 2, 1, Scalar(255, 255, 255));imshow("", img);waitKey(0);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xshell7和Xftp7超详细下载教程(包括安装及连接服务器附安装包)

1.下载 1.官网地址&#xff1a; XSHELL - NetSarang Website 选择学校免费版下载 2.将XSHELL和XFTP全都下载下来 2.安装 安装过程就是选择默认选项&#xff0c;然后无脑下一步 3.连接服务器 1.打开Xshell7&#xff0c;然后新建会话 2.填写相关信息 出现Connection establi…

JVM 性能调优参数

JVM分为堆内存和非堆内存 堆的内存分配用-Xms和-Xmx -Xms分配堆最小内存&#xff0c;默认为物理内存的1/64&#xff1b; -Xmx分配最大内存&#xff0c;默认为物理内存的1/4。 非堆内存分配用-XX:PermSize和-XX:MaxPermSize -XX:PermSize分配非堆最小内存&#xff0c;默认为物理…

【LeetCode高频SQL50题-基础版】打卡第5天:第26~30题

文章目录 【LeetCode高频SQL50题-基础版】打卡第5天&#xff1a;第26~30题⛅前言超过5名学生的课&#x1f512;题目&#x1f511;题解 求关注者的数量&#x1f512;题目&#x1f511;题解 只出现一次的最大数字&#x1f512;题目&#x1f511;题解 买下所有产品的客户&#x1f…

《进化优化》第4章 遗传算法的数学模型

文章目录 4.1 图式理论4.2 马尔可夫链4.3 进化算法的马尔可夫模型的符号4.4 遗传算法的马尔可夫模型4.4.1 选择4.4.2 变异4.4.3 交叉 4.5 遗传算法的动态系统模型4.5.1 选择4.5.2 变异4.5.3 交叉 4.1 图式理论 图式是描述一组个体的位模式&#xff0c;其中用*来表示不在乎的位…

如何在Ubuntu 20.04.6 LTS系统上运行Playwright自动化测试

写在前面 这里以 Ubuntu 20.04.6 LTS为例。示例代码&#xff1a;自动化测试代码。 如果过程中遇到其他非文本中提到的错误&#xff0c;可以使用搜索引擎搜索错误&#xff0c;找出解决方案&#xff0c;再逐步往下进行。 一、 环境准备 1.1 安装python3 1.1.1 使用APT安装Py…

dll文件缺失,ps,pr无法打开,游戏运行不了如何解决

最近重装了系统&#xff0c;然后打开原来的软件发现都会报错&#xff0c;说***.dll文件缺失 于是找了很多解决办法 方案一 说是下载一个dll文件恢复助手&#xff0c;一键恢复 不要信 统统不管用&#xff0c;不是收费高就是没作用 方案二 下载对应dll文件去c盘对应软件位置…

python+opencv+深度学习实现二维码识别 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

Sqlite3 查询 今日、昨日、本周、上周、本月、上月、本季度、上季度、本年

一、使用Between AND select * from 表名 where 字段名 Between ‘2019-1-01 00:00:00’ AND ‘2019-7-12 23:59:59’ 二、使用>,< select * from 表名 where 字段名 > ‘2019-1-01 00:00:00’ and 字段名 < ‘2019-12-12 23:59:59’ 三、升降序 select * from 表…

mathtype嵌入到wps中

首先你需要保证你有一个mathtype&#xff0c;mathtype的安装很简单&#xff0c;请自行查找资料 然后将mathtype嵌入到哪里是一个问题&#xff0c;网上的教程很多&#xff0c;但是一般分为两种&#xff0c;wps和word 那么&#xff0c;我为什么选取wps&#xff1f; 因为word频频碰…

BAT学习——计算当前路径下指定格式文件的MD5值,将文件名与MD5值写入文本

将以下内容粘贴到bat脚本中&#xff0c;双击运行&#xff0c;生成MD5.txt文件&#xff0c;需要其他格式&#xff0c;修改循环中的.rar 多个格式使用or分开 *.rar or *.bat脚本内容 echo off setlocal enabledelayedexpansionrem 设置输出文件名 set "outputFileMD5.txt&…

跨语言深入探讨如何实现方法增强:Java Go的多策略实现

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

虚拟现实VR技术在医疗行业的应用介绍

虚拟现实 (VR) 虽然经常与游戏联系在一起&#xff0c;但不可否认&#xff0c;未来科技少不了虚拟现实&#xff0c;其应用可以彻底改变许多行业。在医疗领域&#xff0c;无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式&#xff0c;比如在手术、疼痛管理…

最新水果FL Studio21.2中文汉化版本覆盖升级

FLStudio中文21最新版本以其使用速度而闻名&#xff0c;是一个高度复杂的音乐制作环境。FL Studio免费&#xff0c;联合国音序器音频和MIDI每个复合编辑都是音乐。现代的DAW是一种非凡的野兽。首先&#xff0c;它在很大程度上把自己放在了(几乎)每个人记录过程的核心。其次&…

【计算机网络】——前言计算机网络发展的历程概述

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头…

【经典排序算法 time: 2023-10-12】冒泡排序(层层优化改进)

原理 每次循环找出一个最大的元素&#xff08;动态演示&#xff09;第一版冒泡 public class Maopao1 {public static void main(String[] args) {long start System.currentTimeMillis();int[] arr2 {11, 23, 69, 99, 1, 3, 45, 67, 5, 234, 678, 999, 7, 123};int[] result…

【2023全网最全教程】web自动化测试入门

一、自动化测试基本介绍 1 自动化测试概述&#xff1a; 什么是自动化测试&#xff1f;一般说来所有能替代人工测试的方式都属于自动化测试&#xff0c;即通过工具和脚本来模拟人执行用例的过程。 2 自动化测试的作用 减少软件测试时间与成本改进软件质量通过扩大测试覆盖率…

hive 之select 中文乱码

此处的中文乱码和mysql的库表 编码 latin utf 无关。 直接上案例。 有时候我们需要自定义一列&#xff0c;有时是汉字有时是字母&#xff0c;结果遇到这种情况了。 说实话看到这真是糟心。这谁受得了。 单独select 没有任何问题。 这是怎么回事呢&#xff1f; 经过一番检查&…

【C++】-c++11的知识点(中)--lambda表达式,可变模板参数以及包装类(bind绑定)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

十六、【橡皮擦工具组】

文章目录 橡皮擦背景橡皮擦1. 一次取样2. 连续取样3. 取样背景色板 魔术橡皮擦 橡皮擦 橡皮擦跟我们平常生活中所用的橡皮擦是一样&#xff0c;它是将图层的内容擦除,只剩下空白部分。另外当我们按住Alt的键去擦除空白部分的时候&#xff0c;也可以将背景的部分显示出来。 另…

架构实战关键知识点

1.维基百科的“系统”定义&#xff1a;https://zh.wikipedia.org/wiki/%E7%B3%BB%E7%B5%B1 2.维基百科的“软件模块”定义&#xff1a;https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%9 4%E6%A8%A1%E7%B5%84 3.维基百科的“软件组件”定义&#xff1a;https://zh.wikipedia.or…