28_OpenCV绘制一个填充的多边形cv::fillConvexPoly()、cv::fillPoly()

2023-12-31 10:58

本文主要是介绍28_OpenCV绘制一个填充的多边形cv::fillConvexPoly()、cv::fillPoly(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV提供函数绘制一个多边形:cv::fillConvexPoly和cv::fillPoly。

cv::fillConvecPoly()函数声明:

void fillConvexPoly(cv::Mat& image,  // image to be drawn onconst cv::Point* pts,  // C- style array of pointsint nps,  // Number of points in 'pts'const cv::Scalar& color, // Color BGR formint lineType = 8,  // connectedness,4 or 8int shift = 0  // bits of radius to treate as fraction
);

函数cv::fillConvexPoly绘制一个填充的多边形,这个函数比cv::fillPoly速度快,因为该函数使用了更简单的算法。需要注意的是cv::fillConvexPoly()使用的算法在多边形有自交点时不能正确工作。pts中的点将被按顺序用直线段连接起来,第一个点和最后一个点之间也会连接起来(也就是说多边形被认为是封闭的。

cv::fillConvexPoly()使用的算法实际上比这里讲述的更加通用。它将正确绘制外轮廓与每条水平线最多相交两次的任意多边形(并且允许多边形的顶部或底部相对于水平线平行)。这样的多边形被认为是相对于水平线单调的。

例如,要画一个填充的矩形,可以使用如下代码:

void DrwaFillPolyRect(cv::Mat &img,const cv::Rect &rect){std::vector<cv::Point> vecPts;vecPts.push_back(rect.tl());vecPts.push_back(cv::Point(rect.x + rect.width, rect.y));vecPts.push_back(rect.br());vecPts.push_back(cv::Point(rect.x, rect.y + rect.height));cv::fillConvexPoly(img, vecPts, CV_RGB(255, 255, 255));
}

cv::fillPoly()函数声明:

void fillPoly(cv::Mat& img,  // image to be drawn onconst cv::Point* pts,  // C-style array of arrays of pointsint npts,  // number of points in pts[i]int ncontours,  // number of arrays in 'pts'const cv::Scalar& color,  // color,BGR formint lineType = 8,  // connectedness, 4 or 8int shift = 0,  // bits of radius to treat as fractioncv::Point offset = cv::Point()  // uniform offset applied to all points
);

cv::fillPoly可以绘制任意数量的填充的多边形。与cv::fillConvexPoly()函数不同的是,这个函数可以处理自交点的情况。

ncontours参数表示一共有多少个不同的多边形轮廓;
npts参数是一个C风格的数组,表示在每一个多边形轮廓里有多少个点(也就是说,npts[i]表示在多边形i中有多少个点)。
pts参数是一个C风格的数组的数组,包含了所有多边形中的所有点(即,pts[i][j]表示第i个多边形中的第j个点)。

cv::fillPoly()还有一个额外的参数offset,这是在绘制多边形时加在所有顶点坐标上的像素偏移。多边形被认为是封闭的(即pts[i][]的最后一个点会和第一个点连起来)。当一个多边形的轮廓和任意水平线至多相交两次时,这个算法就可以正确画出这个多边形(包含多边形的上下两边是水平线的情况)。这种多边形被称为水平单调多边形。

参考:OpenCV-绘制多边形(fillConvexPoly和fillPoly的区别)_翟天保Steven的博客-CSDN博客


 

这篇关于28_OpenCV绘制一个填充的多边形cv::fillConvexPoly()、cv::fillPoly()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/555829

相关文章

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。