十六、多边形填充和绘制

项目功能实现:对多边形进行轮廓绘制和填充
按照之前的博文结构来,这里就不在赘述了

一、头文件

mult-drawing.h

#pragma once#include<opencv2/opencv.hpp>using namespace cv;class Mult_Drawing {
public:void mult_drawing();
};#pragma once

二、函数实现

mult-drawing.cpp

Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
定义一个画布,大小为512*512的全0黑色图片

Point p1(100, 100), p2(350, 100), p3(450, 280), p4(320, 450), p5(80, 400);
得到五个点的位置

pts.push_back(p1); pts.push_back(p2); pts.push_back(p3); pts.push_back(p4); pts.push_back(p5);
对这五个点进行绘制到pts上

方法一:
fillPoly(canvas, pts, Scalar(255, 0, 0), LINE_8, 0);
有了五个点的坐标位置,然后进行填充
polylines(canvas, pts, true, Scalar(0, 255, 0), 2, LINE_AA, 0);
类似,根据五个点的坐标位置进行轮廓绘制
具体的参数定义,可参考博文:十四、图像几何形状绘制
参数一:要处理的图片对象
参数二:各个多边形点的坐标
参数三:线条颜色
参数四:锯齿优化方法
参数五:微调偏置优化

方法二:
drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);
直接绘制,但需要轮廓的特征contours
也就是把pts这些已知的五个点的位置给扔到contours中即可
contours.push_back(pts);像这样
参数一:处理的图片对象
参数二:轮廓数据信息
参数三:-1表示填充,其他正整数表示线条粗细
参数四:线条颜色
参数五:-1表示所有轮廓都绘制填充,其他正整数表示对哪个轮廓进行操作

#include"mult-drawing.h"
#include<iostream>
#include<opencv2/opencv.hpp>void Mult_Drawing::mult_drawing() {Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);Point p1(100, 100), p2(350, 100), p3(450, 280), p4(320, 450), p5(80, 400);std::vector<Point>pts;pts.push_back(p1); pts.push_back(p2); pts.push_back(p3); pts.push_back(p4); pts.push_back(p5);//方法一:得到五个点之后,先填充再绘制fillPoly(canvas, pts, Scalar(255, 0, 0), LINE_8, 0);polylines(canvas, pts, true, Scalar(0, 255, 0), 2, LINE_AA, 0);imshow("mult-drawing", canvas);//方法二:直接填充绘制std::vector<std::vector<Point>>contours;contours.push_back(pts);drawContours(canvas, contours, -1, Scalar(255, 0, 0), -1);imshow("other method", canvas);
}

三、主函数

yy_main.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
#include "mult-drawing.h"using namespace cv;
using namespace std;int main(int argc, char** argv) {Mult_Drawing yy;yy.mult_drawing();waitKey(0);destroyAllWindows();return 0;
}

项目结构如下:
在这里插入图片描述
效果图如下:
在这里插入图片描述

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

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

相关文章

vue如何动态加载显示本地图片资源

在实际开发中&#xff0c;根据某一个变量动态展示图片的情况有很多。实现方法分打包构建工具的差异而不同。 1、webpack的项目 require引入图片资源 2、vite的项目 new URL(url,base).href 疑问解答&#xff1a;为什么vite项目不可以用require&#xff1f; 原因在于&#xf…

Elastic Stack--01--简介、安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. Elastic Stack 简介为什么要学习ESDB-Engines搜索引擎类数据库排名常年霸榜![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/051342a83f574c8c910cda…

微信小程序独立分包与分包预下载

官网链接 独立分包配置方法 独立分包使用限制 独立分包中不能依赖主包和其他分包中的内容&#xff0c;包括 js 文件、模板、wxss、自定义组件等&#xff1b;App 只能在主包内定义&#xff0c;独立分包中不能定义 App&#xff0c;会造成无法预期的行为独立分包中暂时不支持使用…

cocos creator3.x项目打包成aar 加入到已有的Android工程

Cocos crearor版本&#xff1a; 3.4.2 Android Studio Flamingo | 2022.2.1 Patch 2 1、配置构建安卓项目 2、 运行编译无报错 出现问题可尝试修改Gradle版本 修改jdk版本 3、对libservice打包成aar 打包完后 再build/outputs找到aar 如果看不到Tasks模块&#xff0c;在Fil…

sqlserver触发器

在SQL Server中&#xff0c;触发器是一种特殊的数据库对象&#xff0c;它们会在表上执行特定的操作时自动触发。触发器可以用于在表上插入、更新或删除数据时执行自定义的逻辑。触发器通常用于实施数据完整性约束、审计和日志记录等操作。 触发器有三种主要类型&#xff1a; 插…

人机交互新研究:MIT开发了结合脑电和眼电的新式眼镜,与机器狗交互

还记得之前的AI读心术吗&#xff1f;最近&#xff0c;「心想事成」的能力再次进化&#xff0c; ——人类可以通过自己的想法直接控制机器人了&#xff01; 来自麻省理工的研究人员发表了Ddog项目&#xff0c;通过自己开发的脑机接口&#xff08;BCI&#xff09;设备&#xff…

面试答疑03

1、登录鉴权怎么做的&#xff1f;为什么采用jwt的方式&#xff1f;有什么好处&#xff1f; Java登录鉴权常见的实现方式包括**CookieSession、HTTP Basic Authentication、ServletJDBC**等。 在Java的Web应用中&#xff0c;登录鉴权是确认用户身份的关键环节。一个常用的传统…

【Linux内核模块加新功能 DAY6-8】

一、向内核添加新功能 1.1 静态加载法&#xff1a; 即新功能源码与内核其它代码一起编译进uImage文件内 新功能源码与Linux内核源码在同一目录结构下在linux-3.14/driver/char/目录下编写myhello.c&#xff0c;文件内容如下&#xff1a;#include <linux/module.h> #inc…

Vue项目启动过程全记录(node.js运行环境搭建)

一、安装node.js并配置环境变量 1、安装node.js 从Node.js官网下载安装包并安装。然后在安装后的目录&#xff08;如果是下载的压缩文件&#xff0c;则是解压缩的目录&#xff09;下新建node_global和node_cache这两个文件夹。 node_global&#xff1a;npm全局安装位置 node_…

Golang 中 NATS JetStream 的高级特性有哪些?

NATS JetStream 是 NATS 消息系统的一个高级功能模块&#xff0c;提供了许多高级特性&#xff0c;使得它在处理消息时更加灵活、可靠和高效。以下是 NATS JetStream 的一些高级特性&#xff1a; 持久化消息存储&#xff1a;NATS JetStream 使用持久化存储引擎&#xff0c;可以确…

代码随想录三刷day06

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣203. 移除链表元素二、力扣707. 设计链表三、力扣 前言 递归法相对抽象一些&#xff0c;但是其实和双指针法是一样的逻辑&#xff0c;同样是当cur为空的…

机器学习面试:逻辑回归与朴素贝叶斯区别

逻辑回归与朴素贝叶斯区别有以下几个方面: (1)逻辑回归是判别模型&#xff0c;朴素贝叶斯是生成模型&#xff0c;所以生成和判别的所有区别它们都有。 (2)朴素贝叶斯属于贝叶斯&#xff0c;逻辑回归是最大似然&#xff0c;两种概率哲学间的区别。 (3)朴素贝叶斯需要条件独立假设…

【刷题】牛客 JZ64 求1+2+3+...+n

刷题 题目描述思路一 &#xff08;暴力递归版&#xff09;思路二 &#xff08;妙用内存版&#xff09;思路三 &#xff08;快速乘法版&#xff09;思路四 &#xff08;构造巧解版&#xff09;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01…

力扣49.字母异位词分组

题目描述&#xff1a; 49. 字母异位词分组 难度 中等 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea"…

在Linux中查找大文件

在Linux中查找大文件&#xff0c;你可以使用find命令结合其他工具&#xff08;如sort和du&#xff09;来实现。以下是一些常见的方法&#xff1a; 1. 使用find命令查找大文件 你可以使用find命令来查找特定大小以上的文件。例如&#xff0c;要查找当前目录及其子目录中大小超…

高盛:日本这轮通胀是否可持续,关键看房租

租金在日本CPI中的权重高达20%&#xff0c;高盛预计短期内租金将继续拖累通胀至1.7%或以下&#xff0c;长期有望温和上行&#xff0c;使通胀稳在2%的水平。 日本正在转向“去通缩”&#xff0c;房租能否支撑通胀态势&#xff1f; 在日股今年一路高歌、有望“收复失地”时&…

redis的AOF机制

Redis AOF(Append Only File)机制是为了记录每一次redis命令的操作并用于恢复数据。 AOF按顺序记录每一步操作&#xff0c;例如&#xff1a; set k 3, set k 5, set k 10 &#xff0c;当服务器重启后依次执行命令恢复k 10。 日志写入有三种方式&#xff1a; Always&#x…

【【深入浅出的了解从算法到RTL的基本流程】】

深入浅出的了解从算法到RTL的基本流程 首先 明确需求 &#xff0c;明确题目 接下来是第一轮建模-------目的是 验证算法的正确性 这个阶段分为以下两个方面 一方面是 &#xff1a; 通过一些算法仿真工具来对 这个设计进行建模 — 算法原理建模 第二方面是 &#xff1a; 是 算…

hbase最新版本配置属性

1. 说明 hbase的配置属性大全 hbase版本基于 hbase-3.0.0-alpha-4 <?xml version"1.0"?> <?xml-stylesheet type"text/xsl" href"configuration.xsl"?> <!-- /*** Licensed to the Apache Software Foundation (ASF) under…

unity-firebase-Analytics分析库对接后数据不显示原因,及最终解决方法

自己记录一下unity对接了 FirebaseAnalytics.unitypackage&#xff08;基于 firebase_unity_sdk_10.3.0 版本&#xff09; 库后&#xff0c;数据不显示的原因及最终显示解决方法&#xff1a; 1. 代码问题&#xff08;有可能是代码写的问题&#xff0c;正确的代码如下&#xff…