OpenCV-累计概率霍夫变换cv::HoughLinesP
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
函数原型
void HoughLinesP( InputArray image, OutputArray lines,double rho, double theta, int threshold,double minLineLength = 0, double maxLineGap = 0 );
参数说明
- InputArray类型的image,输入图像,需为8位的单通道二进制图像。
- InputArray类型的lines,调用HoughLines函数后存储了霍夫线变换检测到线条的输出矢量。每一条线由具有两个元素的矢量(r,t)表示。r为离坐标原点的距离,t为弧度线条旋转角度。
- double类型的rho,以像素为单位的距离精度。
- double类型的theta,以弧度为单位的角度精度。
- int类型的threshold,累加平面的阈值参数,即识别某部分为图中一直线时它在累加平面中必须达到的值。大于阈值的线段才可以被检测通过并返回到结果中。
- double类型的minLineLength,默认值为0,表示最低线段的长度,比这个设定参数短的线段就不能被显现出来。
- 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");
}
测试效果
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
看过霍夫变换的同学应该知道,两个函数输出line的变量类型不一样,一个是vector<Vec2f>,另一个是vector<Vec4f>,所以在使用时要注意区分;另外个人建议采用累计概率霍夫变换进行直线检测,效率高且识别效果更优。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
OpenCV-累计概率霍夫变换cv::HoughLinesP相关推荐
- OpenCV学习12_霍夫变换与重映射
一.霍夫变换 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在.在许多应用场合中需要快速准确地检测出直线或者圆.其中一种非常有效的解决问题的方法是霍夫(Houg ...
- OpenCV+python:霍夫变换与直线检测
1,霍夫变换 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等).最基本的霍夫变换是从黑白图像中检测直线(线段). 霍夫变换最简 ...
- 绘制pr曲线图_生存分析如何绘制事件发生累计概率曲线图?
公众号前段时间发了篇推文<ggsurvplot()函数绘制Kaplan-Meier生存曲线>用来介绍生存曲线的绘制,下面的推文内容跟这篇文章结合着看. 在生存分析中我们通常关注个体在时间t ...
- OpenCV用thrust使用cv :: cuda :: GpuMat
OpenCV用thrust使用cv :: cuda :: GpuMat 用thrust使用cv :: cuda :: GpuMat 目标 将GpuMat包装到thrust迭代器中 用随机数填充GpuM ...
- OpenCV—矩阵数据类型转换cv::convertTo
OpenCV-矩阵数据类型转换cv::convertTo 函数 [cpp] view plaincopy void convertTo( OutputArray m, int rtype, doubl ...
- Opencv undefined reference to `cv::imread() Ubuntu编译
Ubuntu下编译一个C++文件,C++源程序中使用了opencv,opencv的安装没有问题,但是在编译的过程中出现如下错误: undefined reference to `cv::imread( ...
- 概率霍夫变换(Progressive Probabilistic Hough Transform)原理详解
概率霍夫变换(Progressive Probabilistic Hough Transform)的原理很简单,如下所述: 1.随机获取边缘图像上的前景点,映射到极坐标系画曲线: 2.当极坐标系里面有 ...
- python如何简便使用cumsum函数完成绘制累计概率分布图(CDF)
累积分布函数(Cumulative Distribution Function),又叫分布函数,是概率密度函数的积分,能完整描述一个实随机变量X的概率分布.在电子器件制造中常常用于描述器件失效分布,可 ...
- 核密度估计KDE概率密度以及累计概率计算
最近在用python复现fluxrank(根因定位)论文,其中用到了核密度估计KDE来计算KPI的变化程度,需要计算累计概率值,网上教程还是挺少的,对于核密度估计算法的原理和实现方式网上教程很多, ...
最新文章
- Spring基础专题——第十章(基础注解编程——下)
- altium designer 不自动清除回路 清除功能打开失效
- Refresh your Java skills–面对Java学习过程中的一些迷茫
- 如何修改Vue打包后文件的接口地址配置
- 你有哪些“相见恨晚”的 UE4 学习资料?
- QT--学习疑惑探索
- Windows下安装GitHub客户端
- 一级注册结构工程师《基础考试》题库历年真题
- 扎克伯格是如何让员工学会高效工作的?
- [JAVA]EXCEL工具推荐-MyExcel
- 共阳极管的代码_共阳极数码管显示数字程序的进化
- html页面颜色对应代码
- matlab中magy是什么意思,MATLAB入门基本知识——音频处理
- 零信任架构在企业中的应用
- 钙钛矿型复合氧化物高熵陶瓷/过渡金属碳氮化物高熵陶瓷/固体氧化物燃料电池(SOFC)材料
- flyme最新7基于android,终于来了,魅族开始基于Android 7.0版本的Flyme内测
- mysql list dbs 代替_mysql_list_dbs函数的用法实例汇总
- 亚运赛场阿联酋公主亲自上阵 爱骑超千万
- 微信小程序JS中写Json解析for 数组的用法
- 如何在桌面或者开始菜单中创建快捷方式