十六、多边形填充和绘制

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

一、头文件

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;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IO进程线程第6天

1.使用有名管道完成两个进程的相互通信 send.c代码如下&#xff1a; #include <myhead.h>int main(int argc, const char *argv[]) {pid_t pidfork();if(pid>0){//父进程//从管道1中读取数据int fd-1;if((fdopen("./mkfifo1",O_RDONLY))-1){perror("…

已解决的问题:BIOS中Enter键失效_BIOS中回车键没反应

问题&#xff1a; 未解决的问题&#xff1a;BIOS中enter键失效_bios回车键没反应-CSDN博客 问题复现&#xff1a; Windows7 关机 开机按F2进入BIOS 调整Boot Mode&#xff0c;按Enter建&#xff0c;Enter键失效 按F10&#xff0c;按Enter键&#xff0c;Enter键失效 按E…

Leetcode - 周赛385

目录 一&#xff0c;3042. 统计前后缀下标对 I 二&#xff0c;3043. 最长公共前缀的长度 三&#xff0c;3044. 出现频率最高的质数 四&#xff0c;3045. 统计前后缀下标对 II 一&#xff0c;3042. 统计前后缀下标对 I 该题数据范围小&#xff0c;可直接暴力求解&#xff0c;…

基于springboot+vue的电影评论网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Node.js中如何处理异步编程

在Node.js中&#xff0c;处理异步编程是至关重要的技能。由于Node.js的单线程执行模型&#xff0c;异步编程可以极大地提高程序的性能和响应速度。本文将介绍几种常见的异步编程处理方式&#xff0c;并附上示例代码&#xff0c;帮助您更好地理解和应用异步编程技术。 回调函数…

Nginx-----------高性能的 Web服务端 nginx编译安装 、平滑升级(一)

一、Nginx高性能的 Web服务端 Nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的&#xff0c;开发工作最早从2002年开始&#xff0c;第一次公开发布时间是2004年10月4日&#xff0c;版本号是0.1.02019年3月11日F5与NGINX达成协议,F5 将收购…

小折叠也能成为主力机,全新小折叠旗舰华为Pocket 2正式发布

2024年2月22日&#xff0c;华为在三亚举办华为Pocket 2时尚盛典&#xff0c;正式发布其全新小折叠旗舰华为Pocket 2。一直以来&#xff0c;华为致力于萃取各界艺术灵感&#xff0c;不断探寻科技美学的可能性&#xff0c;华为Pocket系列更是秉承将奢雅美学与尖端科技融为一体的理…

第三百六十回

文章目录 1. 概念介绍2. 实现方法2.1 环绕效果2.2 立体效果 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义SlideImageSwitch组件"相关的内容&#xff0c;本章回中将介绍两种阴影效果.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

ProtoBuf认识与Windows下的安装

protobuf简介 Protobuf 是 Protocol Buffers 的简称&#xff0c;它是 Google 公司开发的一种数据描述语言&#xff0c;是一种轻便高效的结 构化数据存储格式&#xff0c;可以用于结构化数据&#xff0c;或者说序列化。它很适合做数据存储 或 RPC 数据交换格 式 。可用于通讯…

2024最佳住宅代理IP服务商

跨境出海已成为了近几年的最热趋势&#xff0c;大批量的企业开始开拓海外市场&#xff0c;而海外电商领域则是最受欢迎的切入口。新兴的tiktok、Temu&#xff0c;老牌的Amazon、Ebay&#xff0c;热门的Etsy、Mecari等等都是蓝海一片。跨境入门并不难&#xff0c;前期的准备中不…

H桥逆变方式介绍(单极性)

H桥逆变电路实现的就是一个从DC——AC的过程 这个电路有两个时序&#xff0c;Q6Q4是一个导通时序&#xff0c;Q5Q7是一个导通时序 左边两个是高频20KHZ的、互补的sPWM波&#xff0c;右边是低频的50HZ的PWM波 三角波一般叫载波&#xff0c;正弦波叫调制波&#xff08;单片机内…

串的相关题目

于是他错误的点名开始了 我发现有关hash得题目有些是可以通过map数组来完成的&#xff1a;何为map数组&#xff0c;我们先思考一下最简单的桶的排序&#xff0c;桶排序是将我们需要数字最为下标输进数组中&#xff0c;而数组是存放的数字是这个数字出现的次数&#xff0c;但是由…

PLC_博图系列☞基本指令“异或“运算

PLC_博图系列☞基本指令“异或“运算 文章目录 PLC_博图系列☞基本指令“异或“运算背景介绍X&#xff1a;“异或”运算说明参数示例真值表 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 异或 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的…

06 内存管理

目录 c/c内存分布c语言中动态内存管理方式c中动态内存管理方式operator new与operator delete函数new和delete的实现原理定位new表达式(placement-new)常见题 1. c/c内存分布 看一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticV…

基于springboot+vue的教学资源库系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

linux操作系统day2(io文件处理)

二进制文件读写&#xff1a; fread()/fwrite() 读&#xff1a; size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 功能&#xff1a; 从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr 所在的本地内存中。 参数&#xff1a; pt…

【Python Scrapy】分布式爬虫利器

在当今信息爆炸的时代&#xff0c;获取大规模数据对于许多应用至关重要。而分布式爬虫作为一种强大的工具&#xff0c;在处理大量数据采集和高效爬取方面展现了卓越的能力。 本文将深入探讨分布式爬虫的实际应用场景&#xff0c;通过代码示例演示其在提升爬取效率、保障系统稳定…

3个wordpress中文企业主题模板

农业畜牧养殖wordpress主题 简洁大气的农业畜牧养殖wordpress主题&#xff0c;农业农村现代化&#xff0c;离不开新农人、新技术。 https://www.jianzhanpress.com/?p3051 老年公寓wordpress主题 浅绿色简洁实用的老年公寓wordpress主题&#xff0c;适合做养老业务的老年公…

day09-MongoDB

文章目录 day09-MongoDB一、回顾1.1. 行为实战核心要点说明 二、评论系统2.1 MongoDB2.1.1 MongoDB简介①简介②体系结构与术语 2.1.2 安装与连接2.1.3 Springboot整合MongoDB①引入依赖②添加服务端配置③准备实体类④测试-新增⑤测试-查询⑥测试-更新测试-删除 2.2 app端评论…

配置redis-cell 控流插件

1.下载绑定资源也可以到git上下载 https://gitee.com/dianjinshi/springboot-nginx.git 2.创建文件夹 mkdir redis-cell 3.上传到linux上并进入文件夹解压 4.拷贝 docker cp libredis_cell.so redis:/usr/local/etc/redis 5.重启redis docker restart redis 6.进入redis…