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.rhkb.cn/news/315401.html

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

相关文章

国外企业使用生成式人工智能实例100

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

将游戏界面与注册/登录界面连接到一起

一、 导包 在注册页面中导入一个import subprocess包 二、 使用代码将其连接到一起 在循环中加入下面这一行代码&#xff0c;用来实现效果 subprocess.run(["python", "game代码.py"]

Linux中的vi与vim:编辑器的王者之争与深度探索

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 2、vi与vim的历史与发展 …

符合医药行业规范的液氮罐运输和存储温度监测解决方案

API原料药、冻干物质和人体样本必须在玻璃相中以尽可能低的温度运输和存储。专门的低温容器——干式液氮罐——可通过液氮&#xff08;LN2&#xff09;将温度保持在-196 C。由于温度极低&#xff0c;低温容器的温度数据监测不仅具有挑战性&#xff0c;而且还需要更复杂的过程&a…

【论文阅读】ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

ViTAE:Vision transformer advanced by exploring intrinsic inductive bias 论文地址摘要&#xff1a;简介&#xff1a;3 方法论3.1 重温视觉变压器3.2 ViTAE3.3 缩减单元3.4 Normal cell3.5 模型细节 4 训练4.1 Implementation details4.2 Comparison with the state-of-the-…

云原生Service Mesh服务网格简单介绍

serviceMesh是什么 Service Mesh是一个用于处理服务间通信的基础设施层&#xff0c;旨在实现云原生应用复杂服务拓扑中的可靠请求传递。其基本构成是一组与应用一起部署的轻量级网络代理&#xff0c;这些代理对应用来说是透明的。Service Mesh通过统一的方式来控制和处理服务间…

EasyCVR视频汇聚平台无法自动播放视频的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…

Canopen的cia402协议下通过SDO报文控制步进电机

Canopen的cia402协议控制步进电机 硬件搭建软件使用发送写SDO报文格式如下对于0x27、0x22、0x23、0x27、0x2B、0x2F解释简单的驱动器相关参数通常速度模式控制步骤如下 发送数据和驱动器返回数据如下图发送读SDO报文格式如下 硬件搭建 在某宝上随便买个支持CANopen协议的驱动&…

Redis入门到通关之数据结构解析-SkipList

文章目录 ☃️概述☃️总结 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开发者。 博客特色&…

网站被SmartScreen标记为不安全怎么办?

在互联网时代&#xff0c;网站的安全性和可信度是用户选择是否继续访问的重要因素之一&#xff0c;然而&#xff0c;网站运营者偶尔会发现使用Edge浏览器访问网站时&#xff0c;会出现Microsoft Defender SmartScreen&#xff08;以下简称SmartScreen&#xff09;提示网站不安全…

文化旅游3D数字孪生可视化管理平台推动文旅产业迈向更加美好的未来

随着数字化、智能化管理成为文旅产业发展的必然趋势&#xff0c;数字孪生公司深圳华锐视点创新性地推出了景区三维可视化数字孪生平台&#xff0c;将线下的实体景区与线上的虚拟世界完美融合&#xff0c;引领智慧文旅新潮流。 我们运用先进的数字孪生、web3D开发和三维可视化等…

免费实用在线小工具

免费在线工具 https://orcc.online/ pdf在线免费转word文档 https://orcc.online/pdf 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA1/SHA256…) 计算 https://orcc.online/ha…

论文笔记:Time-LLM: Time Series Forecasting by Reprogramming Large Language Models

iclr 2024 reviewer 评分 3888 1 方法 提出了 Time-LLM&#xff0c; 是一个通用的大模型重编程&#xff08;LLM Reprogramming&#xff09;框架将 LLM 轻松用于一般时间序列预测&#xff0c;而无需对大语言模型本身做任何训练 为什么需要时序数据和文本数据对齐&#xff1a;时…

重生之我是Nginx服务专家

nginx服务访问页面白色 问题描述 访问一个域名服务返回页面空白&#xff0c;非响应404。报错如下图。 排查问题 域名解析正常&#xff0c;网络通讯正常&#xff0c;绕过解析地址访问源站IP地址端口访问正常&#xff0c;nginx无异常报错。 在打开文件时&#xff0c;发现无法…

Spring Cloud Alibaba 项目搭建步骤和注意事项

Spring Cloud Alibaba 是一个基于 Spring Cloud 的微服务架构解决方案&#xff0c;它整合了阿里巴巴的多款开源组件&#xff0c;如 Nacos、Sentinel、RocketMQ 等&#xff0c;用于构建分布式微服务系统。 以下是使用 Spring Cloud Alibaba 搭建项目的基本步骤和注意事项&#x…

每日OJ题_DFS回溯剪枝⑦_力扣77. 组合

目录 力扣77. 组合 解析代码 力扣77. 组合 77. 组合 难度 中等 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,…

Stable Diffusion中的embedding

Stable Diffusion中的embedding 嵌入&#xff0c;也称为文本反转&#xff0c;是在 Stable Diffusion 中控制图像样式的另一种方法。在这篇文章中&#xff0c;我们将学习什么是嵌入&#xff0c;在哪里可以找到它们&#xff0c;以及如何使用它们。 什么是嵌入embedding&#xf…

数据分析:生存分析原理和应用实例

介绍 生存分析的目的是分析某个时间点的“生存概率”是多少。基于这样的研究目的,需要提供生存数据,它是一种由不同的开始时间和结束时间组成的事件-时间的数据,比如在癌症研究领域,研究手术到死亡的过程、治疗到疾病进展等等。 在开展生存分析前,需要了解什么是删失(c…

知网怎么查重 知网查重的详细步骤

知网查重八个步骤&#xff1a;1. 访问官网&#xff0c;注册账号。2. 上传待查文档。3. 选择查重规则。4. 选择相似来源库。5. 提交查重任务。6. 等待查重结果。7. 获取查重报告。8. 下载查重报告。 知网查重的详细步骤 第一步&#xff1a;进入知网查重系统 打开浏览器&#x…

FPGA秋招-笔记整理(1)

一、关键路径 关键路径通常是指同步逻辑电路中&#xff0c;组合逻辑时延最大的路径&#xff08;这里我认为还需要加上布线的延迟&#xff09;&#xff0c;也就是说关键路径是对设计性能起决定性影响的时序路径。也就是静态时序报告中WNS&#xff08;Worst Nagative Slack&…