十六、多边形填充和绘制

news2024/11/15 2:13:29

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

一、头文件

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.coloradmin.cn/o/1464191.html

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

相关文章

Employee Management系统存在Sql注入 附源代码

免责声明&#xff1a;本文所涉及的信息安全技术知识仅供参考和学习之用&#xff0c;并不构成任何明示或暗示的保证。读者在使用本文提供的信息时&#xff0c;应自行判断其适用性&#xff0c;并承担由此产生的一切风险和责任。本文作者对于读者基于本文内容所做出的任何行为或决…

C++日志库plog使用指南

前言 之前介绍过一个C语言日志库 轻量级c语言开源日志库log.c介绍&#xff0c;源代码只有不到200行&#xff0c;使用非常方便。但是也存在很多缺点&#xff0c;比如日志时间只支持打印到秒&#xff0c;没有作多线程处理&#xff0c;不支持日志回滚。在小型项目或者测试demo中使…

如何将cocos2d-x js打包部署到ios上 Mac M1系统

项目环境 cocos2d-x 3.13 xcode 12 mac m1 big sur 先找到你的项目 使用xcode软件打开上面这个文件 打开后应该是这个样子 执行编译运行就好了 可能会碰到的错误 在xcode11版本以上都会有这个错误&#xff0c;这是因为iOS11废弃了system。 将上面代码修改为 #if (CC_TARGE…

打败茅台的“老酒”

作者&#xff1a;翻篇 琥珀酒研社快评&#xff1a; 最可恨的 从来不是什么强大敌人 而是美名其曰的猪队友 要不怎么有网友说 酒鬼酒太惨了 当年要不是败给内鬼 又曝出塑化剂事件 错过白酒发展的黄金十年 不说打败茅台、五粮液 但成为另一个茅台、五粮液 那完全有希…

【智慧零售】门店管理设备解决方案,为企业数字化运营升级赋能

2023年我国零售总额超47万亿元&#xff0c;广阔的市场提供了更多机遇&#xff0c;同时随着日趋激烈的竞争&#xff0c;企业也正面临着一些挑战&#xff1a;如何才能有效提升门店生产效率&#xff1f;降低门店运营成本&#xff1f;提高市场竞争力&#xff1f; 零售企业认识到通…

Vue3 + Ts (使用lodash)

安装 npm i --save lodash使用 import _ from lodash⚠️报警告&#xff1a;&#xff01;&#xff01;&#xff01; 此时还需要安装ts声明文件库 npm install types/lodash -D安装之后重启Vscode还是会提示上面的警告&#xff0c;此时还需在tsconfig.ts里面配置 {"c…

QT day2 2.21

1.使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 代码&#xff1a; #include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(pa…

C语言文件操作学习【2】—— 文件的顺序读写

顺序读写函数介绍 函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件 上面说的…

Cartographer框架简述

catographer框架分为前端和后端 前端包括雷达数据处理&#xff1b;位姿预测&#xff1b;扫描匹配和栅格地图更新。 后端包括后端&#xff1a;线程池任务与调度&#xff1b;向位姿图添加节点&#xff0c;计算节点的子图内约束和子图间约束&#xff08;回环检测&#xff09;&…

HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例

HAL STM32 HW I2C DMA SSD1306/SH1106驱动示例 &#x1f4cd;硬件I2C DMA驱动参考&#xff1a;https://blog.csdn.net/weixin_45065888/article/details/118225993 &#x1f4cc;github上的相关项目&#xff1a;https://github.com/taburyak/STM32_OLED_SSD1306_HAL_DMA &am…

typescript映射类型

ts映射类型简介 TypeScript中的映射类型&#xff08;Mapped Type&#xff09;是一种高级类型&#xff0c;它允许我们基于现有类型创建新的类型&#xff0c;同时对新类型的每个属性应用一个转换函数。通过使用映射类型&#xff0c;我们可以方便地对对象的属性进行批量操作&…

猫头虎分享已解决Bug || 系统更新失败(System Update Failure):UpdateError, UpgradeFailure

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

nginx详细教程

一、nginx简介 1. 概述 Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;在 BSD-like 协议下发行。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上 nginx 的并发能力在同类型的网页服务器中…

VMware连通问题

虚拟机配好后发现竟然到网关都不通做了一系列排查后 最后在真机上查看发现VMware的NAT服务没有开启 WinR输入services.msc&#xff0c;启动VMware NAT Service后问题就解决了&#xff01;

【软件架构】02-复杂度来源

1、性能 1&#xff09;单机 受限于主机的CPU、网络、磁盘读写速度等影响 在多线程的互斥性、并发中的同步数据状态等&#xff1b; 扩展&#xff1a;硬件资源、增大线程池 2&#xff09;集群 微服务化拆分&#xff0c;导致调用链过长&#xff0c;网络传输的消耗过多。 集…

L2 清点代码库----PTA(疑问)

上图转自新浪微博&#xff1a;“阿里代码库有几亿行代码&#xff0c;但其中有很多功能重复的代码&#xff0c;比如单单快排就被重写了几百遍。请设计一个程序&#xff0c;能够将代码库中所有功能重复的代码找出。各位大佬有啥想法&#xff0c;我当时就懵了&#xff0c;然后就挂…

基于SpringBoot+MyBatis-Plus的教务管理系统

基于SpringBootMyBatis-Plus的教务管理系统 教务管理系统开发技术功能模块代码结构数据库设计运行截图源码获取 教务管理系统 欢迎访问此博客&#xff0c;是否为自己的毕业设计而担忧呢&#xff1f;是否感觉自己的时间不够做毕业设计呢&#xff1f;那你不妨看一下下面的文章&a…

QFileDialog文件选择对话框

QFileDialog 类是 Qt 框架中用于处理文件对话框的一个类&#xff0c;它继承自 QDialog。QFileDialog 提供了标准的文件选择对话框&#xff0c;使用户能够选择文件或目录。这个类可以用于打开或保存文件&#xff0c;也可以用来选择目录。 主要功能 打开和保存文件&#xff1a;…

什么是测试?测试测什么?

笔者是软件测试方向的硕士研究生。作为应届生拿下了20余个软件测试、测试开发的offer。 《校招生如何准备测试》系列会将我的测试理论体系与大家分享、探讨和学习。本期主要串联一下什么是测试、软件测试测什么&#xff08;测试类型&#xff09;。 Q&#xff1a;什么是软件测…

华清远见嵌入式学习——驱动开发——DAY8

作业要求&#xff1a; 1.使用GPIO子系统编写LED灯驱动&#xff0c;应用程序测试 2.注册三个按键的中断&#xff0c;只需要写内核代码 需要发布到CSDN 作业答案&#xff1a; GPIO子系统&#xff1a; 代码效果&#xff1a; 应用程序&#xff1a; #include<stdlib.h> …