Opencv-cvHoughLines2

Opencv-cvHoughLines2,opencv,hough-transform,Opencv,Hough Transform,我正在阅读Learning openCV,在这本书中我看到了cvHoughLines2的描述。但有一件事我不明白 我读过Hough变换,我想我理解它,所以参数rho和theta让我有点困惑。当我们有方程时,rho=xcos(θ)+ycos(θ)当我们决定theta的一些离散值时,rho的值应该是自动已知的 在这本书中,据说opencv创建了rhoxthetaaccumlator数组 opencv是否只是将角度离散为360/θ的倍数?但是rho参数如何匹配?rho的值是如何离散的?你的问题不清楚,

我正在阅读
Learning openCV
,在这本书中我看到了
cvHoughLines2
的描述。但有一件事我不明白

我读过Hough变换,我想我理解它,所以参数
rho
theta
让我有点困惑。当我们有方程时,
rho=xcos(θ)+ycos(θ)
当我们决定
theta
的一些离散值时,
rho
的值应该是自动已知的

在这本书中,据说
opencv
创建了
rho
x
theta
accumlator数组


opencv是否只是将角度离散为
360/θ的倍数?但是
rho
参数如何匹配?
rho
的值是如何离散的?

你的问题不清楚,似乎你很困惑。看一看。给定一组属于一条直线的点(x和y),你可以用两个参数r和θ来描述同一条直线。这是我们想要找到的两个独立参数,它们最好地描述了点所在的直线。

在开始时,你决定θ的向量,比如说10个数字,你需要将结果四舍五入到矩阵的像素中,其中行表示半径,列表示角度 因此,如果某条直线的角度和半径相同,它将向累加器添加一个值。 [0 36 .. 360] 还有半径向量[1 2 3..10] 然后创建图像M*N全零,例如 [ 0 0 0 0 0 0 0 0 0] 然后你们在一定的半径和角度上执行你们写的公式,你们的矩阵变成 [ 1 0 0 0 0 0 0]

然后 [ 1 0 0 0 0 1 0 0 0] 然后 [20 0 0 1 0 1 0] 等等
然后,您可以设置阈值,只找到一些直线或某些角度。

是的,为了在计算机内存中表示累加器阵列,我们需要选择角度值(θ),当我们选择有限个θ时,我们可以计算
r
。我不明白为什么opencv要我把角度和a
r
的值都传给他。单是角度就足以创建accumlator阵列。好吧,现在我确定你的算法错了,看看我文章中的页面,先把你认为算法工作的方式放在一边。opencv的两个参数是这两个维度中的分辨率。或者看看Hough transform上的wikipedia页面。嘿,这个链接是关于,一旦你浏览了它,我相信它会让你清楚这个主题。