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霍夫变换:霍夫线变换,霍夫圆变换