opencv2.4.9中HoughlinesP源码中的疑问解析!

相信大部分人都看过这篇文章:

Opencv2.4.9源码分析——HoughLinesP :https://blog.csdn.net/zhaocj/article/details/40047397

赵老师分析的很详细也很深入,但是对于初学者来说,还是有些死角没覆盖到。文章解答两个问题:

1、rho的数量

numrho = cvRound(((width + height) * 2 + 1) / rho);

为啥角度的个数就是 numangle = cvRound(CV_PI / theta);

而距离的个数就不能是图像对角线的长度/rho呢?

回想一下映射公式:

\rho =xcos\theta +ysin\theta

x和y都是正的,而sin和cos结果是正负的,因此申请空间的时候,应该是实际距离的2倍。这个2倍没毛病,那为啥不是对角线的长度,而是(width+height)?我也没弄明白,是不是为了整齐,方便后面计算地址的时候方便?还是因为width和height是未知的,并不知道xcos\theta +ysin\theta的最大值是多少,索性就两者相加,肯定超不过这个范围呢?

2 shift到底是干啥的?

,<<shift到底是干啥的?

从计算dy的时候发现:

dy0 = cvRound( b*(1 << shift)/fabs(a) );

这个应该是一种快速的计算小数的方法,精度是1/(2^16),这个就是b/a*(2^16),但是是在完全的整数情况下计算的,如果计算平台是DSP,支持硬件浮点运算的话,那就随意去计算这个dy dx了,小数就小数呗,反正都是一个指令周期,但是为了适应不同平台,采用纯整数计算的方法,达到高精度的计算,算是很巧妙的想法了!后面在搜索的时候,加完dy dx后,就又向右移动了16bit, 相当于是只截取整数部分,小数部分全部截断:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值