OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合

目录

1.轮廓外接最大矩形boundingRect()

2.轮廓外接最小矩形minAreaRect()

3.轮廓外接多边形approxPolyDP()


1.轮廓外接最大矩形boundingRect()

Rect cv::boundingRect ( InputArray array )

  • array:输入的灰度图像或者2D点集,数据类型为vector<Point>或者Mat。

示例代码:

//轮廓最大外接矩阵
void Contour_external_maxmatrix(Mat image) {Mat gray,binary;cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化GaussianBlur(gray,gray,Size(9,9),2,2);//滤波threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化//轮廓检测vector<vector<Point>> contours;//轮廓vector<Vec4i> hierarchy;//存放轮廓结构变量findContours(binary,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());//寻找轮廓的外接矩阵for(int n=0;n<contours.size();n++) {//最大外接矩阵Rect rect = boundingRect(contours[n]);rectangle(image, rect, Scalar(7, 67, 255), 2, 8, 0);}imwrite("/sdcard/DCIM/max.png",image);
}

 轮廓外接最大矩形的结果:

2.轮廓外接最小矩形minAreaRect()

RotatedRect cv::minAreaRect ( InputArray points )

  • array:输入的灰度图像或者2D点集,数据类型为vector<Point>或者Mat。

示例代码:


//轮廓最小外接矩阵
void Contour_external_minmatrix(Mat image){Mat gray,binary;cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化GaussianBlur(gray,gray,Size(9,9),2,2);//滤波threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化//轮廓检测vector<vector<Point>> contours;//轮廓vector<Vec4i> hierarchy;//存放轮廓结构变量findContours(binary,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());//寻找轮廓的外接矩阵for(int n=0;n<contours.size();n++) {//最小外接矩阵RotatedRect rrect= minAreaRect(contours[n]);Point2f points[4];rrect.points(points);//读取最小外接矩阵的四个顶点Point2f cpt=rrect.center;//最小外接矩阵的中心//绘制旋转矩阵与中心位置for(int i=0;i<4;i++){if(i==3){line(image,points[i],points[0],Scalar(0,0,255,255),2,8,0);break;}line(image,points[i],points[i+1],Scalar(0,0,255,255),2,8,0);}//绘制矩阵中心circle(image,cpt,4,Scalar(0,0,255,255),-1,8,0);}imwrite("/sdcard/DCIM/min.png",image);}

 轮廓外接最小矩形的结果:

 

3.轮廓外接多边形approxPolyDP()

void cv::approxPolyDP (InputArray curve,

OutputArray approxCurve,

double    epsilon,

bool      closed

  • curve:输入轮廓像素点。
  • approxCurve:多边形逼近结果,以多边形顶点坐标的形式给出
  • epsilon:逼近的精度,即原始曲线和逼近曲线之间的最大距离。
  • closed:逼近曲线是否为封闭曲线的标志, true表示曲线封闭,即最后一个顶点与第一个顶点相连

示例代码:


void drawapp(Mat result,Mat img2){for(int i=0;i<result.rows;i++){//最后一个坐标点与第一个坐标点连接if(i==result.rows-1){Vec2i point1=result.at<Vec2i>(i);Vec2i point2=result.at<Vec2i>(0);line(img2,point1,point2,Scalar(0,0,255,255),4,8,0);break;}Vec2i point1=result.at<Vec2i>(i);Vec2i point2=result.at<Vec2i>(i+1);line(img2,point1,point2,Scalar(0,0,255,255),4,8,0);}}//轮廓多边形拟合
void Contour_external_matrix(Mat image){Mat gray,binary;cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化// GaussianBlur(gray,gray,Size(9,9),2,2);//滤波// threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化//轮廓的发现与绘制vector<vector<Point>> contours;//轮廓vector<Vec4i> hierarchy;//存放轮廓结构变量findContours(gray,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());//绘制多边形for(int n=0;n<contours.size();n++) {//用最小外接矩阵求取轮廓中心RotatedRect rrect= minAreaRect(contours[n]);Point2f center=rrect.center;//最小外接矩阵的中心circle(image,center,2,Scalar(0,0,255,255),2,8,0);Mat result;approxPolyDP(contours[n],result,4,true);//多边形拟合drawapp(result,image);}imwrite("/sdcard/DCIM/matrix.png",image);}

多边形拟合的结果:

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

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

相关文章

LA@二次型@标准化相关原理和方法

文章目录 标准化方法正交变换法&#x1f388;求矩阵的特征值求各特征值对应的线性无关特征向量组正交化各个向量组 配方法步骤例例 初等变换法原理总结初等变换法的步骤例 标准化方法 正交变换法&#x1f388; 二次型可标准化定理的证明过程给出使用二次型标准化的步骤 该方法…

Go语言的[GPM模型]

在go中,线程是运行Groutine的实体,调度器的功能是把可以运行的Groutine分配到工作线程上 GPM模型 M与P的数量没有绝对的数量关系,当一个M阻塞时,P就会创建一个或者切换到另一个M,所以即使设置了runtime.GOMAXPROCS(1) 也可能创建多个M出来; 当M发现给自己输送G协程的那个P队列为…

什么是脚本语言,解释脚本语言的特点和应用领域

1、什么是脚本语言&#xff0c;解释脚本语言的特点和应用领域。 脚本语言是一种编程语言&#xff0c;通常用于自动化任务或脚本。它们通常比传统的编程语言更容易学习和使用&#xff0c;因为它们通常具有更少的语法和更简单的命令。 脚本语言的特点包括&#xff1a; 简单易学…

《AI一键生成抖音商品种草文案》让你秒变带货王!

在这个数字化的时代&#xff0c;我们的生活被各种应用所包围&#xff0c;其中&#xff0c;抖音作为一款短视频分享平台&#xff0c;已经成为了我们生活中不可或缺的一部分。然而&#xff0c;作为一名抖音创作者&#xff0c;你是否曾经遇到过这样的困扰&#xff1a;在创作商品种…

HJ57 高精度整数加法

题目&#xff1a; HJ57 高精度整数加法 题解&#xff1a; 1.逐位相加 按照传统加减法模式&#xff0c;从最后一位开始&#xff0c;逐位相加&#xff0c;逢十进一&#xff0c;传统方式从右往左相加&#xff0c;可以将数字翻转&#xff0c;变成从左往右按照数组遍历顺序相加&…

C#程序到底从哪里开始看,从Main函数开始,那么Main函数是什么?

视觉人机器视觉粉丝问我,拿到自己公司得架构,问我,C#程序到底从哪里看,从Main函数开始,那么Main函数是什么? Main()函数 Main()是C#应用程序的入口点,执行这个函数就是执行应用程序。也就是说,在执行过程开始时,会执行Main()函数,在Main()函数执行完毕时,执行过…

【JavaSpring】spring接口-beanfactory和applicationcontext与事件解耦

beanfactory 1.applicationcontext的父接口 2.是Spring的核心容器 功能 表面只有getBean&#xff0c;但实现类默默发挥了巨大作用 1.管理所有bean 2.控制反转 3.基本的依赖注入 applicationcontext 功能 1.继承了MessageSource&#xff0c;有了处理国际化资源的能力 …

[H5动画制作系列] Sprite及Text Demo

参考代码: sprite.js: var canvas, stage, container; canvas document.getElementById("mainView"); function init() {stage new createjs.Stage(canvas);createjs.Touch.enable(stage);var loader new createjs.LoadQueue(false);loader.addEventListener(&q…

云计算与虚拟化

一、概念 什么是云计算&#xff1f; 云计算&#xff08;cloud computing&#xff09;是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序&#xff0c;然后&#xff0c;通过多部服务器组成的系统进行处理和分析这些小程序得到结果…

SLAM论文详解(5) — Bundle_Adjustment_LM(BALM)论文详解

目录 1 摘要 2 相关工作 3 BA公式和导数 A. 直接BA公式 B. 导数 C. 二阶近似 4 自适应体素化 5. 将BALM结合进LOAM 6. 实验 7. 算法应用场景解析 1 摘要 Bundle Adjustment是一种用于同时估计三维结构和传感器运动运动的优化算法。在视觉SLAM&#xff0c;三维重建等…

剑指 Offer 30. 包含min函数的栈

剑指 Offer 30. 包含min函数的栈 方法一 使用两个栈。 class MinStack {Deque<Integer> stack new ArrayDeque<>();Deque<Integer> stack_min new ArrayDeque<>();public MinStack() {}public void push(int x) {stack.push(x);if(stack_min.isEm…

eclipse

快捷键 F4: 继承树 F3: 查看变量、方法、类的定义, 跳到光标所在标识符的定义代码。(Ctrl左键) CtrlShiftG&#xff1a; 在工作空间中查找引用了光标所在标识符的位置。与F3相反的快捷键。当按类定义进行阅读时&#xff0c;当前类方法或者函数在被哪些地方调用 controlTAB: 切…

怎样理解NgRx中的reducer,action,和state?

在NgRx中&#xff0c;Reducer、Action和State是核心概念&#xff0c;用于实现应用程序的状态管理。以下是对这些概念的解释和理解&#xff1a; Reducer&#xff08;减速器&#xff09;&#xff1a; 定义&#xff1a; Reducer是一个纯函数&#xff0c;接受当前状态&#xff08…

[Docker Java 服务]Docker 容器中Java服务问题排查

排查工具 - Arthas 官方介绍 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法…

爬虫逆向实战(30)-某查查股东关联公司(HmacSHA512)

一、数据接口分析 主页地址&#xff1a;某查查 1、抓包 通过抓包可以发现数据接口是api/people/getRelatCompany 2、判断是否有加密参数 请求参数是否加密&#xff1f; 无 请求头是否加密&#xff1f; 通过查看“标头”可以发现&#xff0c;请求头中有一个key和value都是…

基于Sentinel的微服务保护

前言 Sentinel是Alibaba开源的一款微服务流控组件&#xff0c;用于解决分布式应用场景下服务的稳定性问题。Sentinel具有丰富的应用场景&#xff0c;它基于流量提供一系列的服务保护措施&#xff0c;例如多线程秒杀情况下的系统承载&#xff0c;并发访问下的流量控制&#xff…

9.8day59

503. 下一个更大元素 II - 力扣&#xff08;LeetCode&#xff09; 知识点&#xff1a;单调栈 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09;

Qt的窗口系统

代码仓库以及参考文件见文章底部 坐标体系 要想学好GUI,界面的坐标系首先要搞清楚 在Qt编程中,以左上角为原点,X向右增加,Y向下增加。 对于所有嵌套的窗口,其坐标是相对于父窗口来说的。 QWidget 所有窗口以及窗口控件都是从QWidget直接或者间接派生出来的。 对象模…

蓝桥杯官网练习题(图像模糊)

题目描述 小蓝有一张黑白图像&#xff0c;由 nm 个像素组成&#xff0c;其中从上到下共 n 行&#xff0c;每行从左到右 &#xfffd;m 列。每个像素由一个 0 到 255 之间的灰度值表示。 现在&#xff0c;小蓝准备对图像进行模糊操作&#xff0c;操作的方法为&#xff1a; 对…

基于Fomantic UI Web构建 个人导航站点网站源码 网站技术导航源码

BYR-Navi-master好看有个性的网站技术导航源码 该网站基于Fomantic UI Web框架构建&#xff0c;整个项目的设计和构建具有高度的配置和定制灵活性。 整体风格比较适合个人导航站点使用 搜索框输入关键词后&#xff0c;点击上方搜索引擎图标可跳转打开对应搜索引擎搜索结果&am…