当前位置: 首页 > news >正文

OpenCV特征检测(11)从一组点中检测直线的函数

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

在一组点中使用标准霍夫变换查找直线。
该函数使用霍夫变换的一种改进方法在一组点中查找直线。

HoughLinesPointSet 是 OpenCV 中的一个函数,用于从一组点中检测直线。这个函数特别适用于处理不连续的点集,它可以检测这些点集中的直线。与 HoughLines 和 HoughLinesP 不同,HoughLinesPointSet 专门设计用于处理点集而不是边缘图像。

函数原型


void cv::HoughLinesPointSet
(InputArray 	point,OutputArray 	lines,int 	lines_max,int 	threshold,double 	min_rho,double 	max_rho,double 	rho_step,double 	min_theta,double 	max_theta,double 	theta_step 
)		

参数

  • 参数point: 输入的点向量。每个点必须编码为 Point 向量(x, y)。类型必须是 CV_32FC2 或 CV_32SC2。

  • 参数lines: 输出的已找到的直线向量。每个向量编码为 Vec3d 向量(votes, rho, theta)。‘votes’ 的值越大,霍夫直线的可靠性越高。

  • 参数lines_max: 霍夫直线的最大数量。

  • 参数threshold: 累加器的阈值参数。只有那些获得足够投票数(>threshold)的直线才会被返回。

  • 参数min_rho: 累加器中 ρ 的最小值(注意:ρ 可以是负数。绝对值 |ρ| 是直线到原点的距离)。

  • 参数max_rho: 累加器中 ρ 的最大值。

  • 参数rho_step: 累加器的距离分辨率。

  • 参数min_theta: 累加器中角度的最小值(以弧度为单位)。

  • 参数max_theta: 累加器中角度的上限(以弧度为单位)。实际的最大角度可能稍微小于 max_theta,具体取决于 min_theta 和 theta_step 参数。

  • 参数theta_step: 累加器的角度分辨率(以弧度为单位)。

代码示例


#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;
using namespace std;
int main()
{Mat lines;vector< Vec3d > line3d;vector< Point2f > point;const static float Points[ 20 ][ 2 ] = { { 0.0f, 369.0f },   { 10.0f, 364.0f },  { 20.0f, 358.0f },  { 30.0f, 352.0f },  { 40.0f, 346.0f },  { 50.0f, 341.0f },  { 60.0f, 335.0f },{ 70.0f, 329.0f },  { 80.0f, 323.0f },  { 90.0f, 318.0f },  { 100.0f, 312.0f }, { 110.0f, 306.0f }, { 120.0f, 300.0f }, { 130.0f, 295.0f },{ 140.0f, 289.0f }, { 150.0f, 284.0f }, { 160.0f, 277.0f }, { 170.0f, 271.0f }, { 180.0f, 266.0f }, { 190.0f, 260.0f } };for ( int i = 0; i < 20; i++ ){point.push_back( Point2f( Points[ i ][ 0 ], Points[ i ][ 1 ] ) );}double rhoMin = 0.0f, rhoMax = 360.0f, rhoStep = 1;double thetaMin = 0.0f, thetaMax = CV_PI / 2.0f, thetaStep = CV_PI / 180.0f;HoughLinesPointSet( point, lines, 20, 1, rhoMin, rhoMax, rhoStep, thetaMin, thetaMax, thetaStep );lines.copyTo( line3d );printf( "votes投票数:%d, rho距离:%.7f, theta角度:%.7f\n", ( int )line3d.at( 0 ).val[ 0 ], line3d.at( 0 ).val[ 1 ], line3d.at( 0 ).val[ 2 ] );
}

运行结果

votes投票数:19, rho距离:320.0000000, theta角度:1.0471976

相关文章:

  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,开头部分
  • Select插件的用法
  • git报错:无法读取远程分支 ‘origin‘ does not appear to be a git repository
  • NLP-transformer学习:(7)evaluate实践
  • 物理学基础精解【7】
  • 平衡、软技能与持续学习
  • 绝了,自从用了它,我每天能多摸鱼2小时!
  • 【如何学习Python编程?】
  • element-plus 日历组件 Calendar设置每周第一天为周一-非国际化版
  • 编译 FFmpeg 以支持 AV1 编解码器以及其他硬件加速选项(如 NVENC、VAAPI 等)
  • 什么是源文件?
  • provide,inject父传子
  • (二)Optional
  • 【计算机组成原理】实验一:运算器输入锁存器数据写实验
  • 如何防范关联方风险传导?风险监控4.0,新增关联方风险维度!
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • ECMAScript入门(七)--Module语法
  • isset在php5.6-和php7.0+的一些差异
  • Java小白进阶笔记(3)-初级面向对象
  • Koa2 之文件上传下载
  • Python进阶细节
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Redis 懒删除(lazy free)简史
  • vue-router的history模式发布配置
  • Webpack 4 学习01(基础配置)
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 关于 Cirru Editor 存储格式
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何编写一个可升级的智能合约
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 我的面试准备过程--容器(更新中)
  • 一道面试题引发的“血案”
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 【云吞铺子】性能抖动剖析(二)
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ${factoryList }后面有空格不影响
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (LLM) 很笨
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (三分钟)速览传统边缘检测算子
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)jdk与jre的区别
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • *2 echo、printf、mkdir命令的应用
  • .htaccess配置重写url引擎
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net Stream篇(六)