我想检测一条线并提取其两个端点。常见的方法是使用霍夫变换。幸运的是,OpenCV中有一个关于事宜的sample,因此我画了一条线,其两端为p1(100,200), p2(400,200)
。我认为上述方法仅能为我提供这些要点。我的样本图片是
霍夫变换为我提供了两个图像
对于Canny过滤器,
在代码中,似乎检测到了两行。这解释了为什么红线较粗,这表明存在两行而不是一行。当我打印出行数时,显示如下两行
lines.size(): 2
p1:<99,201> p2:<401,201>
lines.size(): 2
p1:<102,198> p2:<398,198>
为什么我要两行?
最佳答案
这可能是由于HoughSpace中垃圾箱的宽度所致。
您可能选择了默认的OpenCv功能之一,即HoughLines(X, X, 1, CV_PI/180, X, X, X );
不是X的参数定义bins see的宽度。
那里说:rho : The resolution of the parameter r in pixels. We use 1 pixel.
对于第一个参数和第二个参数:theta: The resolution of the parameter \theta in radians. We use 1 degree (CV_PI/180)
我现在没有选择的值,但是您可能希望选择更大的值。
关于c++ - 为什么霍夫变换只检测到两行而却检测到两行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30817656/