作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

函数原型

void HoughLinesP( InputArray image, OutputArray lines,double rho, double theta, int threshold,double minLineLength = 0, double maxLineGap = 0 );

参数说明

  1. InputArray类型的image,输入图像,需为8位的单通道二进制图像。
  2. InputArray类型的lines,调用HoughLines函数后存储了霍夫线变换检测到线条的输出矢量。每一条线由具有两个元素的矢量(r,t)表示。r为离坐标原点的距离,t为弧度线条旋转角度。
  3. double类型的rho,以像素为单位的距离精度。
  4. double类型的theta,以弧度为单位的角度精度。
  5. int类型的threshold,累加平面的阈值参数,即识别某部分为图中一直线时它在累加平面中必须达到的值。大于阈值的线段才可以被检测通过并返回到结果中。
  6. double类型的minLineLength,默认值为0,表示最低线段的长度,比这个设定参数短的线段就不能被显现出来。
  7. double类型的minLineGap,默认值为0,允许将同一行点与点之间连接起来的最大的距离。

什么是累计概率霍夫变换?

OpenCV支持累计概率霍夫变换(PPHT),调用函数为HoughLinesP,PPHT是标准霍夫变换(SHT)的一个改进,它在一定范围内进行霍夫变换,计算单独线段的方向以及范围,从而大大减少计算量,缩短计算时间。之所以称其为“概率”,是因为并不将累加器平面内的所有可能的点累加,而只是累加其中的一部分,该想法是如果峰值足够高,只用一小部分时间去寻找它就足够了,PPHT的执行效率相比SHT高很多。

霍夫变换的具体介绍请看:OpenCV-标准霍夫变换cv::HoughLines_翟天保的博客-CSDN博客

测试代码

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;void main()
{Mat src = imread("test.png");Mat mid, dst;Canny(src, mid, 200, 250);cvtColor(mid, dst, COLOR_GRAY2BGR);// 累计概率霍夫变换vector<Vec4f> lines;HoughLinesP(mid, lines, 1, CV_PI / 180.0, 150, 50, 20);for (size_t i = 0; i < lines.size(); ++i){Vec4f l = lines[i];line(dst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 255, 255), 1, 16);}imshow("src", src);imshow("mid", mid);imshow("result", dst);waitKey(0);system("pause");
}

测试效果

图1 原图

图2 边缘检测

图3 直线检测效果图

看过霍夫变换的同学应该知道,两个函数输出line的变量类型不一样,一个是vector<Vec2f>,另一个是vector<Vec4f>,所以在使用时要注意区分;另外个人建议采用累计概率霍夫变换进行直线检测,效率高且识别效果更优。

如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

OpenCV-累计概率霍夫变换cv::HoughLinesP相关推荐

  1. OpenCV学习12_霍夫变换与重映射

    一.霍夫变换 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在.在许多应用场合中需要快速准确地检测出直线或者圆.其中一种非常有效的解决问题的方法是霍夫(Houg ...

  2. OpenCV+python:霍夫变换与直线检测

    1,霍夫变换 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等).最基本的霍夫变换是从黑白图像中检测直线(线段). 霍夫变换最简 ...

  3. 绘制pr曲线图_生存分析如何绘制事件发生累计概率曲线图?

    公众号前段时间发了篇推文<ggsurvplot()函数绘制Kaplan-Meier生存曲线>用来介绍生存曲线的绘制,下面的推文内容跟这篇文章结合着看. 在生存分析中我们通常关注个体在时间t ...

  4. OpenCV用thrust使用cv :: cuda :: GpuMat

    OpenCV用thrust使用cv :: cuda :: GpuMat 用thrust使用cv :: cuda :: GpuMat 目标 将GpuMat包装到thrust迭代器中 用随机数填充GpuM ...

  5. OpenCV—矩阵数据类型转换cv::convertTo

    OpenCV-矩阵数据类型转换cv::convertTo 函数 [cpp] view plaincopy void convertTo( OutputArray m, int rtype, doubl ...

  6. Opencv undefined reference to `cv::imread() Ubuntu编译

    Ubuntu下编译一个C++文件,C++源程序中使用了opencv,opencv的安装没有问题,但是在编译的过程中出现如下错误: undefined reference to `cv::imread( ...

  7. 概率霍夫变换(Progressive Probabilistic Hough Transform)原理详解

    概率霍夫变换(Progressive Probabilistic Hough Transform)的原理很简单,如下所述: 1.随机获取边缘图像上的前景点,映射到极坐标系画曲线: 2.当极坐标系里面有 ...

  8. python如何简便使用cumsum函数完成绘制累计概率分布图(CDF)

    累积分布函数(Cumulative Distribution Function),又叫分布函数,是概率密度函数的积分,能完整描述一个实随机变量X的概率分布.在电子器件制造中常常用于描述器件失效分布,可 ...

  9. 核密度估计KDE概率密度以及累计概率计算

    ​ 最近在用python复现fluxrank(根因定位)论文,其中用到了核密度估计KDE来计算KPI的变化程度,需要计算累计概率值,网上教程还是挺少的,对于核密度估计算法的原理和实现方式网上教程很多, ...

最新文章

  1. Spring基础专题——第十章(基础注解编程——下)
  2. altium designer 不自动清除回路 清除功能打开失效
  3. Refresh your Java skills–面对Java学习过程中的一些迷茫
  4. 如何修改Vue打包后文件的接口地址配置
  5. 你有哪些“相见恨晚”的 UE4 学习资料?
  6. QT--学习疑惑探索
  7. Windows下安装GitHub客户端
  8. 一级注册结构工程师《基础考试》题库历年真题
  9. 扎克伯格是如何让员工学会高效工作的?
  10. [JAVA]EXCEL工具推荐-MyExcel
  11. 共阳极管的代码_共阳极数码管显示数字程序的进化
  12. html页面颜色对应代码
  13. matlab中magy是什么意思,MATLAB入门基本知识——音频处理
  14. 零信任架构在企业中的应用
  15. 钙钛矿型复合氧化物高熵陶瓷/过渡金属碳氮化物高熵陶瓷/固体氧化物燃料电池(SOFC)材料
  16. flyme最新7基于android,终于来了,魅族开始基于Android 7.0版本的Flyme内测
  17. mysql list dbs 代替_mysql_list_dbs函数的用法实例汇总
  18. 亚运赛场阿联酋公主亲自上阵 爱骑超千万
  19. 微信小程序JS中写Json解析for 数组的用法
  20. 如何在桌面或者开始菜单中创建快捷方式

热门文章

  1. linux命令最终篇
  2. 《SolidWorks 2013中文版完全自学手册》——2.5 添加几何关系
  3. JavaMail入门第四篇 接收邮件
  4. php数组的几个函数和超全局变量
  5. linux分布式安装hadoop1.2
  6. zend反编译-dezender 使用
  7. POJ 1095 Trees Made to Order
  8. 2011-08-15 “can’t create transaction lock on /v...
  9. u盘当启动盘(多种方法)
  10. synchronized可重入锁