Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# opencv houghlines2线条长度非常短_C#_Opencv_Detection_Hough Transform - Fatal编程技术网

C# opencv houghlines2线条长度非常短

C# opencv houghlines2线条长度非常短,c#,opencv,detection,hough-transform,C#,Opencv,Detection,Hough Transform,我有一条角度为205度、长度为77像素的直线。(与sqrt(x^2+y^2)一起发现)有点像这样。这张图片上的测量值不正确,只是为了告诉你我的意思。 我正在这样表演houghlines2: image.HoughLines2(storage, HoughLinesMethod.Probalistic, 2, Cv.PI / 90, 1, lineLength, 0); 我添加了一个for循环,以确保我检测到了这条线。当线条长度为44时,我最终使用houghlines2方法找到了线条-请参见下

我有一条角度为205度、长度为77像素的直线。(与sqrt(x^2+y^2)一起发现)有点像这样。这张图片上的测量值不正确,只是为了告诉你我的意思。

我正在这样表演houghlines2:

image.HoughLines2(storage, HoughLinesMethod.Probalistic, 2, Cv.PI / 90, 1, lineLength, 0);
我添加了一个for循环,以确保我检测到了这条线。当线条长度为44时,我最终使用houghlines2方法找到了线条-请参见下图

为什么我要一直到44岁?我需要能够找到“几乎”正确的长度,+-10是可以的,但是-33太多了


我需要的是关于如何进行HoughtTransform的答案,而不是很多不同阅读资料的链接。我已经读了很多页了,但是我想不出来。让我试着试试这个。。。今年夏天我在C++中使用了OpenCV的Hough变换,而我从未真正获得好的结果。 我大致了解了为什么标准Hough变换有时无法检测到直线,这可能会解释为什么这也不起作用: 应用
HoughLines2
方法时,必须指定rho和theta参数。现在,如果该参数设置不正确(例如,箱子相距太宽,θ太大),则可能会“遗漏”部分线条

你说你读了一些书,所以你知道大概的意思。现在,如果你试着想象一行从
(0,0)
(500,1)
。如果您知道数字直线是如何绘制的,那么您就会知道这通常是一种类似于直线的显示方式:一条是从
(0,0)
(250,0)
,另一条是从
(250,1)
(500,1)
。如果您的Hough角现在很大(例如,大于直线所处的角度),它将永远不会实际“捕捉”同一箱子中的所有点,并且基本上会检测到两条长度为250的直线。不仅仅是“小”一点,实际上是很多。由于
HOUGH_概率
不仅需要像素落在同一个“箱子”中,而且还需要它们在原始图片中或多或少地连续,这可能会为这个故事增加另一层复杂性

<> P>其他的解释,如果你考虑只检测线段,可能是适用的,最小长度不是由像素的实数决定的,而是由在同一个库中结束的像素的数量决定的。现在,由于上面提到的同一件事,所有的77个像素可能实际上都不在箱子里,因此短


当然,所有这些只是我认为可能导致问题的一个基本原则。但希望能有所帮助。我的建议是:尝试使用“rho”和“theta”参数,或者其他参数,只检测正常线。这些方法在OpenCV中的实现比在IMO中的这个版本要好一点。

让我试试看。。。今年夏天我在C++中使用了OpenCV的Hough变换,而我从未真正获得好的结果。 我大致了解了为什么标准Hough变换有时无法检测到直线,这可能会解释为什么这也不起作用: 应用
HoughLines2
方法时,必须指定rho和theta参数。现在,如果该参数设置不正确(例如,箱子相距太宽,θ太大),则可能会“遗漏”部分线条

你说你读了一些书,所以你知道大概的意思。现在,如果你试着想象一行从
(0,0)
(500,1)
。如果您知道数字直线是如何绘制的,那么您就会知道这通常是一种类似于直线的显示方式:一条是从
(0,0)
(250,0)
,另一条是从
(250,1)
(500,1)
。如果您的Hough角现在很大(例如,大于直线所处的角度),它将永远不会实际“捕捉”同一箱子中的所有点,并且基本上会检测到两条长度为250的直线。不仅仅是“小”一点,实际上是很多。由于
HOUGH_概率
不仅需要像素落在同一个“箱子”中,而且还需要它们在原始图片中或多或少地连续,这可能会为这个故事增加另一层复杂性

<> P>其他的解释,如果你考虑只检测线段,可能是适用的,最小长度不是由像素的实数决定的,而是由在同一个库中结束的像素的数量决定的。现在,由于上面提到的同一件事,所有的77个像素可能实际上都不在箱子里,因此短


当然,所有这些只是我认为可能导致问题的一个基本原则。但希望能有所帮助。我的建议是:尝试使用“rho”和“theta”参数,或者其他参数,只检测正常线。这些方法在OpenCV中的实现要比这个版本的IMO好一点。

是否可以进行一些模糊或类似的操作,从而实现“长线”?你试过这个或类似的东西吗?你可能会尝试一些模糊-但你可能会得到多个回答。我会在你的位置尝试的是a)使用ρ&θ和b)检测直线而不是线段,然后自己检测线段-例如,沿着建议的直线逐像素移动,当有3个以上的非黑色像素,或者最后10个像素的像素比率低于60%或类似的值时,你得到了直线的末端(开始时非常类似-只是反转颜色)有可能进行一些模糊或类似的操作,从而形成一条“长线”吗?您尝试过这个或类似的操作吗?您可能尝试过一些模糊,但随后您可能会得到多个响应。我将尝试什么