OpenCV的HoughLines按什么顺序列出了[rho,theta]矩阵中检测到的线?

2024-10-01 19:18:04 发布

您现在位置:Python中文网/ 问答频道 /正文

当一个给定的带有线的图像被传递到OpenCV的HoughLine变换时,它返回一个rho和theta对的列表,每个对定义一条单独的线。这些线在rho,theta对列表中的排列顺序是什么。在

例如,当这个8行的图像在python中使用时, image with 8 line

接下来,返回八行的θ矩阵。在

[[ 461.            1.48352981]
 [ 380.            1.48352981]
 [ 212.            1.48352981]
 [ 112.            1.48352981]
 [  65.            1.48352981]
 [ 334.            1.48352981]
 [ 269.            1.48352981]
 [ 508.            1.48352981]]

openCV是如何确定这些行在这个矩阵中列出的顺序的?在


Tags: 图像image列表定义顺序withline矩阵
2条回答

来自OpenCV源代码https://github.com/opencv/opencv/blob/master/modules/imgproc/src/hough.cpp

函数houghlinessstandard实现从第80行开始的标准hough变换。在

如果我们再向下滚动一点(第166行),我们会发现:

 // stage 3. sort the detected lines by accumulator value
    std::sort(_sort_buf.begin(), _sort_buf.end(), hough_cmp_gt(accum));

现在,行列表按累加器值升序排序。并将最好的linesMax结果放入输出缓冲区。在

^{pr2}$

如果您不知道累加器的值是多少,请阅读Hough变换是如何工作的。https://en.wikipedia.org/wiki/Hough_transform

它基本上就是多少像素组成了这个菱形对。在

它们可能以字典(r,Θ)或(Θ,r)顺序返回,因此平行线将通过增加与原点的距离或随机(角度的顺序不可预测)出现。在

函数的设计者没有理由强制执行某个特定的顺序,因为在一般情况下没有任何逻辑线(平行线或准平行线是例外)。在

如果你想要一个特定的命令,那就由你来指定和实现它。例如,通过递增r排序,当Θ转了半圈时,注意分配一个负号。也可以使用垂直线对交点的纵坐标进行排序。在


在小猪发现后,它们被力量送回。我的前一段仍然适用。在

相关问题 更多 >

    热门问题