OpenCV霍夫最强线

Posted

技术标签:

【中文标题】OpenCV霍夫最强线【英文标题】:OpenCV Hough strongest lines 【发布时间】:2012-07-06 08:11:41 【问题描述】:

OpenCV 中的 HoughLines 或 HoughLinesP 函数是否像 HoughCircles 函数一样以累加器顺序返回行列表?我想知道行的顺序。获取线的累加器值也非常方便,因此可以使用智能和自适应阈值而不是固定阈值。如果没有rewriting OpenCV myself,排序或累加器值是否可用?

【问题讨论】:

好一个。我一直认为这些线条是按顺序排列的。到目前为止,这个假设与我的结果是一致的……但是,很高兴能确定。 【参考方案1】:

HoughTransform 按票数降序排列行。可以看代码here

但是,当函数返回时,投票计数会丢失 - 获得它的唯一方法是修改 OpenCV。

好消息是这不是很复杂 - 我自己做过一次。将输出从 vector< Vec2f > 更改为 vector< Vec3f > 并用投票计数填充最后一个参数只需几分钟。

另外,您必须修改 CvLinePolar 以添加第三个参数 - hough 在 C 中实现,并且在 C++ 中有一个包装器,因此您必须同时修改实现和包装器。

要修改的主要代码在这里

 for( i = 0; i < linesMax; i++ )
 
        CvLinePolar line;
        int idx = sort_buf[i];
        int n = cvFloor(idx*scale) - 1;
        int r = idx - (n+1)*(numrho+2) - 1;
        line.rho = (r - (numrho - 1)*0.5f) * rho;
        line.angle = n * theta;

        // add this line, and a field voteCount to CvLinePolar
        // DO NOT FORGET TO MODIFY THE C++ WRAPPER
        line.voteCount = accum[idx];          

        cvSeqPush( lines, &line );
 

【讨论】:

感谢您明确说明并将我指向代码。我正在使用概率版本并浏览代码,最好也将linesMax 带出来以加快速度。 概率在同一个文件中,我想你已经找到了。行搜索中的不同方法意味着投票计数不像经典 H 中那样相关。只要一行具有所需的最少票数,它就会被推送到结果队列中。不执行排序。 您好,很抱歉修改了这个线程,但是您知道如何在概率霍夫变换中获取累加器值吗?我不太确定该行的投票在累加器矩阵中的哪个位置。

以上是关于OpenCV霍夫最强线的主要内容,如果未能解决你的问题,请参考以下文章

学习 opencv---(13)opencv霍夫变换:霍夫线变换,霍夫圆变换

OpenCV探索之路:霍夫变换

opencv识别车道线(霍夫线变换)

OpenCV入门教程之十四OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑

OpenCV中的霍夫线变换和霍夫圆变换

无法使用opencv使用霍夫变换定位线