opencv图片绘制图形-------c++

绘制图形

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <filesystem>bool opencvTool::drawPolygon(std::string image_p, std::vector<cv::Point> points)
{cv::Mat ima = cv::imread(image_p.c_str()); // 读取图像,替换为你的图片路径  cv::Scalar red = cv::Scalar(0, 0, 255);  // Red color  cv::Scalar blue = cv::Scalar(255, 0, 0);  // Red color  int thickness = 2;// 使用polylines函数给图片绘制多边形cv::polylines(ima, points, true, red, thickness, 8, 0);// 填充颜色cv::fillPoly(ima, std::vector<std::vector<cv::Point>>{points}, blue, 8, 0);cv::imwrite(image_p.c_str(), ima);return true;
}bool opencvTool::drawPolygon(cv::Mat& image, std::vector<cv::Point> points, int lineWidth)
{if (image.empty()){std::cout << "Error: empty mat" << std::endl;return false;}// 确保多边形点的数量大于等于3if (points.size() < 3){std::cout << "Error: need at least 3 points to draw a polygon" << std::endl;return false;}// 绘制多边形cv::polylines(image, points, true, cv::Scalar(0, 0, 255), lineWidth);return true;
}

在这里插入图片描述

    // 在图像上绘制多边形并设置线条宽度static bool drawPolygon(cv::Mat& image, std::vector<cv::Point> points, int lineWidth = 1){if (image.empty()){std::cout << "Error: empty mat" << std::endl;return false;}// 确保多边形点的数量大于等于3if (points.size() < 3){std::cout << "Error: need at least 3 points to draw a polygon" << std::endl;return false;}// 将多边形点转换为 OpenCV 的 Point 数组cv::Point *pts = new cv::Point[points.size()];for (size_t i = 0; i < points.size(); ++i){pts[i] = points[i];}// 绘制多边形const cv::Point* ppt[1] = { pts };int npt[] = { static_cast<int>(points.size()) };cv::polylines(image, ppt, npt, 1, true, cv::Scalar(255, 255, 255), lineWidth);delete[] pts;return true;}
  1. cv::Point *pts = new cv::Point[points.size()];: 这行代码创建了一个动态分配的 cv::Point 数组,数组的大小等于传入的顶点数量 points.size()。这个数组将用于存储多边形的顶点坐标。
  2. for (size_t i = 0; i < points.size(); ++i): 这是一个 for 循环,用于遍历传入的顶点向量 points 中的每个顶点。
  3. pts[i] = points[i];: 在循环中,我们将每个顶点 points[i] 的坐标赋值给 pts 数组中对应位置的 cv::Point 对象。
  4. const cv::Point* ppt[1] = { pts };: 这里创建了一个指针数组 ppt,其中包含一个指针指向我们刚刚创建的 pts 数组。这是为了满足 polylines 函数的参数要求,因为该函数期望一个指向多边形顶点数组的指针数组。
  5. int npt[] = { static_cast<int>(points.size()) };: 这里创建了一个整数数组 npt,其中包含一个整数,即多边形顶点的数量。同样,这是为了符合 polylines 函数的参数规范。
  6. cv::polylines(image, ppt, npt, 1, true, cv::Scalar(255, 255, 255), lineWidth);: 最后,这行代码调用了 OpenCV 的 polylines 函数来绘制多边形。它接受图像 image、多边形顶点指针数组 ppt、多边形顶点数量数组 npt、线条段数(这里是1表示绘制完整的多边形)、是否封闭多边形(true 表示封闭)、线条颜色(这里是白色,cv::Scalar(255, 255, 255))、以及线条宽度(lineWidth)作为参数。
  7. delete[] pts;: 最后,我们释放动态分配的 pts 数组的内存,以防止内存泄漏。

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

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

相关文章

制造业智慧工厂

在信息化、智能化浪潮的推动下&#xff0c;制造业正迎来一场前所未有的变革。智慧工厂&#xff0c;作为这一变革的核心载体&#xff0c;正逐渐成为制造业发展的新引擎。HiWoo Cloud平台&#xff0c;以其卓越的物联网云技术&#xff0c;为制造业智慧工厂的构建提供了强有力的支持…

Linux逻辑方式合并物理磁盘

在日常生活中&#xff0c;我们总是遇到一个文件太大&#xff0c;以至于我们的两个磁盘都装不下&#xff0c;这时我们就需要将两块物理磁盘逻辑化的连接在一起&#xff0c;把物理磁盘使用逻辑化的方法合并在一起&#xff0c;形成卷组&#xff0c;使得磁盘空间可以公用&#xff1…

【 AIGC 研究最新方向(上)】面向平面、视觉、时尚设计的高可用 AIGC 研究方向总结

目前面向平面、视觉、时尚等设计领域的高可用 AIGC 方向有以下 4 种&#xff1a; 透明图层生成可控生成图像定制化SVG 生成 本篇&#xff08;上篇&#xff09;介绍 1、2&#xff0c;而下篇将介绍 3、4。 透明图层生成 LayerDiffuse 代表性论文&#xff1a;Transparent Imag…

请编写函数fun,该函数的功能是:实现B=A+A‘,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…

redis基础(一)

启动与关闭 启动命令在/usr/local/bin目录 服务端后台启动&#xff1a;redis-server opt/redis-6.2.1/redis.conf 客户端连接&#xff1a;执行 redis-cli 关闭操作 ​ 方式1&#xff1a;进入终端后关闭 ​ 方式2&#xff1a;直接kill 掉进程 方式3&#xff1a;通过实例关闭 …

【力扣周赛】第394场周赛

文章目录 1.统计特殊字母的数量2.使矩阵满足条件的最少操作次数 1.统计特殊字母的数量 题目链接 &#x1f34e;该题涉及的小技巧&#xff1a;&#x1f425; &#x1f427;①大写字母和对应的小写字母低5位都是相等的&#xff1b; &#x1f427;②大写字母ASCII二进制第 6 位…

应用实战|只需几步,即可享有外卖订餐小程序

本示例是一个简单的外卖查看店铺点菜的外卖微信小程序&#xff0c;小程序后端服务使用了MemFire Cloud&#xff0c;其中使用到的MemFire Cloud功能包括&#xff1a; 其中使用到的MemFire Cloud功能包括&#xff1a; 云数据库&#xff1a;存储外卖微信小程序所有数据表的信息。…

实时采集麦克风并播放(springboot+webscoekt+webrtc)

项目技术 springbootwebscoektwebrtc 项目介绍 项目通过前端webrtc采集麦克风声音&#xff0c;通过websocket发送后台&#xff0c;然后处理成g711-alaw字节数据发生给广播UDP并播放。 后台处理项目使用线程池(5个线程)接受webrtc数据并处理g711-alaw字节数组放到Map容器中&…

PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化

为什么要对图像进行拉普拉斯锐化 对图像进行拉普拉斯锐化的目的是增强图像的边缘和细节&#xff0c;使图像看起来更加清晰和锐利。这种技术常用于图像处理中&#xff0c;具体原因如下&#xff1a; 增强图像的边缘信息&#xff1a;拉普拉斯锐化可以突出图像中的边缘特征&#x…

程序不包含适用于入口点的静态Main方法

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

西湖大学赵世钰老师【强化学习的数学原理】学习笔记1节

强化学习的数学原理是由西湖大学赵世钰老师带来的关于RL理论方面的详细课程&#xff0c;本课程深入浅出地介绍了RL的基础原理&#xff0c;前置技能只需要基础的编程能力、概率论以及一部分的高等数学&#xff0c;你听完之后会在大脑里面清晰的勾勒出RL公式推导链条中的每一个部…

数据结构_时间复杂度

✨✨所属专栏&#xff1a;数据结构✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 什么是时间复杂度&#xff1f; 时间复杂度的定义&#xff1a;在计算机科学中&#xff0c;算法的时间复杂度是一个函数&#xff0c;它定量描述了该算法的运行时间。一个算法执行所耗费的时间&#xff0…

【go零基础】go-zero从零基础学习到实战教程 - 0环境配置

是个前端&#xff0c;最近开始学习go&#xff0c;后端除node外基本0基础&#xff0c;所以学习曲线有点绕&#xff0c;目标是个基础的服务端demo&#xff0c;搞个api服务后台&#xff0c;包含基础的用户登录、文章发布和写文章、权限控制&#xff0c;差不多就是个完整博客系统。…

发现肺结节怎么办?5个肺结节诊疗病例分享

近期“肺结节离癌症有多远”上了热搜&#xff0c;当体检报告上出现“肺结节”&#xff0c;不少朋友都万分焦虑。其实&#xff0c;直径小于8mm的实性肺结节不需要做手术&#xff0c;但要记得定期复诊看肺结节是往良性还是往恶性发展&#xff1b;如果是直径大于8mm的实性肺结节就…

Git 使用 下载分支 提交新项目到当前分支 三(公司快速上手版)

文章背景 git已经装好了&#xff0c;公司的也给创建好账户了&#xff0c;仓库地址也有了。 领导已经给你说了是哪个分支了。 如何下载远程仓库中的一个项目分支&#xff0c;到本地电脑上。 并且如何将新建的项目上传到当前分支的远程仓库 下载 步骤 创建文件夹。 右键 Op…

前端JS必用工具【js-tool-big-box】,Number数值转换的方法调用学习

这一小节&#xff0c;我们针对前端工具包&#xff08;npm&#xff09;js-tool-big-box的使用做一些讲解&#xff0c;主要是针对Number数值型转换的一些方法使用。 目录 前言 1 安装和引入 2 千位逗号分割 3 判断是否大于0 4 判断是否大于0的整数 5 生成指定范围内的随机数…

Win32 API 光标隐藏定位和键盘读取等常用函数

Win32 API 光标隐藏定位和键盘读取等常用函数 一、Win32 API二、控制台程序指令modetitlepausecls 三、控制台屏幕上坐标的结构体COORD四、句柄获取函数GetStdHandle五、控制台光标操作1.控制台光标信息结构体CONSOLE_CURSOR_INFO2.得到光标信息函数GetConsoleCursorInfo3. 设置…

【Java数据结构】深入解析ArrayList与顺序表

【Java数据结构】深入解析ArrayList与顺序表 1.前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.ArrayList的介绍 3.使用ArrayList 3.1 ArrayList的构造方法 3.11 第一个构造方法 3.12第二个构造方法 3.13第三个构造方法 3.2ArrayList中的tostring方…

Spring IOC(一)

1. Spring IOC入门 1.1 什么是Spring IoC IoC&#xff08;Inversion of Control&#xff09;&#xff0c;即控制反转&#xff0c;是一种设计原则。简单来说&#xff0c;IoC就是将程序的某种传统控制流程反转了。 在Spring框架中&#xff0c;控制反转体现在对象的创建和管理上。…

jsp servlet 学生信息管理系统

一、角色划分 1、超级管理员 2、学生 二、模块展示 1、登录 2、列表页面【超级管理员展示所有用户信息、学生只展示当前登录用户信息】 3、新增 4、编辑 三、数据库【mysql】 四、运行演示 jsp servlet 学生信息管理系统