C++:opencv多边形逼近二值图轮廓--cv::approxPolyDP

news/2024/9/19 4:51:10/ 标签: c++, opencv, 开发语言

cv::approxPolyDP 是 OpenCV 中一个用于多边形逼近的函数。它通过 Douglas-Peucker 算法将复杂的轮廓简化为更少的点,这在图像处理和计算机视觉中非常有用。例如,简化的轮廓可以帮助提高形状分析和轮廓检测的效率。

函数原型

void cv::approxPolyDP(const cv::InputArray& curve, cv::OutputArray& approxCurve, double epsilon, bool closed
);

参数解释

  1. curve:

    • 类型: cv::InputArray
    • 描述: 输入的轮廓或曲线,通常是由 cv::findContours 函数返回的点集。它包含了一系列的点,表示一个轮廓或曲线。
  2. approxCurve:

    • 类型: cv::OutputArray
    • 描述: 输出的近似轮廓。函数将处理后的近似多边形存储在这个参数中。它将被填充为简化后的点集。
  3. epsilon:

    • 类型: double
    • 描述: 逼近精度的控制参数,表示允许的最大误差。它是原始轮廓到近似多边形的最大距离。epsilon 值越小,逼近的多边形越接近原始轮廓;epsilon 值越大,逼近的多边形越粗糙。
    • 计算方式: epsilon 通常是轮廓周长的一个比例,如 0.01 * cv::arcLength(curve, true),其中 0.01 是一个示例比例,实际应用中可以根据需求调整。
  4. closed:

    • 类型: bool
    • 描述: 指定轮廓是否闭合。如果 true,函数将假定轮廓是闭合的,即首尾相连;如果 false,函数将假定轮廓是不闭合的。

函数功能

cv::approxPolyDP 使用 Douglas-Peucker 算法对输入的轮廓进行多边形逼近,简化轮廓的点集,减少点的数量。这个函数常用于:

  • 轮廓简化: 将复杂的轮廓简化为更少的点,以便于进一步分析和处理。
  • 形状识别: 简化轮廓可以帮助识别和分析图像中的几何形状。
  • 数据压缩: 减少点的数量,有助于减少数据量,提高处理速度。

示例代码

以下是一个示例,展示如何使用 cv::approxPolyDP 简化一个轮廓:

#include <opencv2/opencv.hpp>
#include <vector>
#include <iostream>int main() {// 创建一个示例轮廓(例如,一个复杂的多边形)std::vector<cv::Point> contour = {cv::Point(0, 0),cv::Point(10, 0),cv::Point(10, 10),cv::Point(5, 15),cv::Point(0, 10)};// 将轮廓转换为 cv::Mat 类型cv::Mat contourMat(contour);// 用于存储近似轮廓std::vector<cv::Point> approxCurve;// 计算 epsilon,设定为轮廓长度的 10%double epsilon = 0.1 * cv::arcLength(contourMat, true);// 执行多边形逼近cv::approxPolyDP(contourMat, approxCurve, epsilon, true);// 输出结果std::cout << "Original contour size: " << contour.size() << std::endl;std::cout << "Approximated contour size: " << approxCurve.size() << std::endl;// 打印近似轮廓的点for (const auto& point : approxCurve) {std::cout << "(" << point.x << ", " << point.y << ") ";}std::cout << std::endl;return 0;
}

解释

  1. 创建轮廓:

    • 示例中创建了一个多边形轮廓,表示一个简单的复杂形状。
  2. 计算 epsilon:

    • epsilon 设置为轮廓周长的 10%,控制多边形逼近的精度。这个值可以根据实际需求进行调整。
  3. 调用 cv::approxPolyDP:

    • 使用 cv::approxPolyDP 进行轮廓简化,将轮廓简化为更少的点,并存储在 approxCurve 中。
  4. 输出:

    • 打印原始轮廓和简化后的轮廓的点数,以及简化后的轮廓点坐标,以展示简化效果。

总结

  • 功能: cv::approxPolyDP 用于对轮廓进行多边形逼近,简化轮廓的点集。
  • epsilon 参数: 控制逼近精度的误差容忍度,影响轮廓简化的详细程度。
  • 应用: 适用于轮廓简化、形状识别和数据压缩等任务,提高图像处理的效率和准确性。

通过调整 epsilonclosed 参数,可以灵活地处理不同类型的轮廓和应用场景。


http://www.ppmy.cn/news/1526223.html

相关文章

基于Python的自然语言处理系列(9):使用TorchText与预训练词嵌入进行新闻分类

在前一篇文章中&#xff0c;我们展示了如何使用TorchText和RNN进行新闻分类。在这篇文章中&#xff0c;我们将改进之前的模型&#xff0c;通过使用预训练词嵌入、优化器的更改、正交初始化以及打包填充序列的技巧&#xff0c;提升模型的学习效率和效果。 1. 改进方向 提高模型…

计算机网络八股总结

这里写目录标题 网络模型划分&#xff08;五层和七层&#xff09;及每一层的功能五层网络模型七层网络模型&#xff08;OSI模型&#xff09; 三次握手和四次挥手具体过程及原因三次握手四次挥手 TCP/IP协议组成UDP协议与TCP/IP协议的区别Http协议相关知识网络地址&#xff0c;子…

HarmonyOS开发之使用PhotoViewPicker(图库选择器)保存图片

一&#xff1a;效果图 二&#xff1a;添加依赖 import fs from ohos.file.fs;//文件管理 import picker from ohos.file.picker//选择器 三&#xff1a;下载&#xff0c;保存图片的实现 // 下载图片imgUrldownloadAndSaveImage(imgUrl: string) {http.createHttp().request(…

笔记共享平台|基于Java+vue的读书笔记共享平台系统(源码+数据库+文档)

笔记共享平台|读书笔记共享平台系统 目录 基于Javavue的读书笔记共享平台系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…

林草湿地址、导出echart为word

2.导出 // 导出exportDoc () {this.loading truelet arrRefs [this.$refs.endChart, this.$refs.processChart, this.$refs.officeEndChart]setTimeout(() > {Promise.all(arrRefs.map((canvasDom) > {return this.html2canvasHandle(canvasDom)})).then(res > {let…

系统架构设计师 需求分析篇一

&#x1f4d8; 结构化分析SA 思想 自顶向下&#xff1a;像剥洋葱一样&#xff0c;层层深入&#xff0c;大问题拆成小问题&#xff0c;再拆成更小的问题。 核心模型 数据字典 &#x1f4d4;&#xff1a;记录数据元素的点点滴滴&#xff0c;从属性到使用方式&#xff0c;无所…

音视频开发常见的开源项目汇总

FFmpeg 地址&#xff1a;https://ffmpeg.org/介绍&#xff1a;FFmpeg 是一个非常强大的开源多媒体框架&#xff0c;它可以用来处理视频和音频文件。它支持多种格式的转换、编码、解码、转码、流处理等。FFmpeg 包括了 libavformat、libavcodec、libavutil、libswscale、libpos…

实时监控分析广告数据跳转统计平台源码

广告跳转实时分析页面统计系统&#xff0c;可选择生成html页面样式&#xff0c;可自定义设置页面域名后缀&#xff0c;可指定跳转指定网址&#xff0c; 可记录单个页面的访问记录&#xff0c;可对生成的单个链接进行备注&#xff0c;自定义等待时间进行跳转。 源码下载&#…

GitHub上克隆项目

从GitHub上克隆项目是一个简单且直接的过程&#xff0c;它允许你将远程仓库中的项目复制到你的本地计算机上&#xff0c;以便进行进一步的开发、测试或学习。以下是一个详细的步骤指南&#xff0c;帮助你从GitHub上克隆项目。 一、准备工作 1. 安装Git 在克隆GitHub项目之前…

uni-app开发微信小程序

Uni-app 是一个使用 Vue.js 开发跨平台应用的框架&#xff0c;支持构建微信小程序、H5、iOS、Android 等多种平台的应用。以下是使用 Uni-app 开发微信小程序的基本步骤和一些实用技巧。 1. 环境准备 安装 HBuilderX HBuilderX 是 DCloud 提供的 IDE&#xff0c;支持 Uni-app …

网站优化与服务器:性能提升的双重奏

在互联网高速发展的今天&#xff0c;网站的响应速度和用户体验直接影响着用户的留存率和转化率。而服务器作为网站运行的基石&#xff0c;其性能和配置对网站优化起着至关重要的作用。 服务器对网站性能的影响 服务器的响应速度、稳定性和处理能力直接影响网站的加载时间和运行…

使用EXPORT_SYMBOL

在Linux内核里,我们编写驱动程序时,如果遇到的驱动太大,需要在各个模块之间共享一些变量或函数等,此时就需要用到内核里的EXPORT_SYMBOL宏了,其在include/linux/export.h文件中定义,而最常用的有如下两个: #define EXPORT_SYMBOL(sym) …

Pytorch+Anaconda+Pycharm+Python

0 python知识 0.1 os库常见用法 os 库提供了许多用于操作操作系统功能的函数。常见用法包括&#xff1a; 文件和目录操作&#xff1a; os.listdir(path)&#xff1a;列出指定路径下的所有文件和目录。os.mkdir(path)&#xff1a;创建新目录。os.remove(path)&#xff1a;删除…

滚雪球学SpringCloud[3.2讲]:Hystrix:熔断与降级详解

全文目录&#xff1a; 前言1. Hystrix的基本原理与作用1.1 熔断器模式1.2 服务降级1.3 线程池隔离1.4 请求缓存与批处理 2. Hystrix的熔断器配置与使用2.1 基本配置2.2 熔断器参数调整 3. Hystrix Dashboard的监控与可视化3.1 配置与启动Dashboard3.2 Dashboard的价值 4. 实战案…

路由等保测评

1.身份鉴别 应对登录的用户进行身份标识和鉴别&#xff0c; 身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换。 可以使用“ service password-encryption"命令对存储在配置文件中的所有口令和类似数据进行加密&#xff0c; 以避免攻击者通过读取配…

信息安全数学基础(14)欧拉函数

前言 在信息安全数学基础中&#xff0c;欧拉函数&#xff08;Eulers Totient Function&#xff09;是一个非常重要的概念&#xff0c;它与模运算、剩余类、简化剩余系以及密码学中的许多应用紧密相关。欧拉函数用符号 φ(n) 表示&#xff0c;其中 n 是一个正整数。 一、定义 欧…

【JavaScript】LeetCode:36-40

文章目录 36 两数相加37 删除链表的倒数第n个节点38 两两交换链表中的节点39 k个一组翻转链表40 随机链表的复制 36 两数相加 创建一个新的链表&#xff08;哨兵节点指向&#xff09;&#xff0c;这个链表用来表示两个数相加后的和。从个位开始相加&#xff0c;每次都向新链表尾…

.NET/C#⾯试题汇总系列:多线程

1.根据线程安全的相关知识&#xff0c;分析以下代码&#xff0c;当调⽤test⽅法时i>10时是否会引起死锁?并简 要说明理由。 public void test(int i) {lock(this){if (i>10){i--;test(i);}} } 不会发⽣死锁&#xff0c;&#xff08;但有⼀点int是按值传递的&#xff0…

秃姐学AI系列之:实战Kaggle比赛:狗的品种识别(ImageNet Dogs)

目录 前置准备 整理数据集 图片增广 读取数据集 微调预训练模型 训练函数 训练和验证模型 Kaggle提交结果 前置准备 常规导包 import os import torch import torchvision from torch import nn from d2l import torch as d2l 使用小规模数据样本 d2l.DATA_HUB[dog…

GIS在线监测SF6密度微水传感器免焊接格兰头航插插头

概述 GIS&#xff08;气体绝缘金属封闭开关设备&#xff09;中的SF6&#xff08;六氟化硫&#xff09;气体密度微水传感器航插技术是指在GIS设备中安装SF6气体密度和微水传感器&#xff0c;以实现对SF6气体状态的在线监测。这些传感器能够实时监测SF6气体的密度、微水含量以及其…