在emgucv加入线

时间:2011-12-01 04:55:48

标签: line emgucv

我有以下类型的图像 Output

我希望我用黄色环绕的小线应该组合成一条线。即如果两条线之间的距离小于某个阈值,它们应该连接起来。

我尝试使用emgucv的Dilate命令,但不需要的行也变粗。

提前完成: - )

1 个答案:

答案 0 :(得分:4)

你的Houghline功能是什么我提供了一种方法。通过更改这些设置,您可以连接线,仅显示具有最强特征的线。但是,这种方法可能会很困难,因为您有一个非常嘈杂的图像,您可能希望在尝试查找这些线之前先查看更好的边缘检测方法。

对于每一行:

    private Image<Bgr, Byte> apply_Hough(Image<Bgr, Byte> Input_Image)
    {

        LineSegment2D[] lines = Input_Image.HoughLinesBinary(
          1, //Distance resolution in pixel-related units
          Math.PI / 45.0, //Angle resolution measured in radians.
          50, //threshold
          100, //min Line width
          1 //gap between lines
          )[0]; //Get the lines from the first channel
        Image<Bgr, Byte> lineImage = img.Copy();
        foreach (LineSegment2D line in lines)
            Input_Image.Draw(line, new Bgr(Color.Red), 2);

        return Input_Image;
    } 

霍夫线使用非常先进的投票方法,其中只显示最强的线条并且应该相应地列出它们。因此,尝试使用for循环替换foreach循环,只显示前6个最强的行,如此。

对于6条最强的线:

    private Image<Bgr, Byte> apply_Hough(Image<Bgr, Byte> Input_Image)
    {

        LineSegment2D[] lines = Input_Image.HoughLinesBinary(
          1, //Distance resolution in pixel-related units
          Math.PI / 90.0, //Angle resolution measured in radians.
          50, //threshold
          100, //min Line width
          1 //gap between lines
          )[0]; //Get the lines from the first channel
        Image<Bgr, Byte> lineImage = img.Copy();

        for (int i = 0; i <= 6; i++)
        {
            Input_Image.Draw(lines[i], new Bgr(Color.Red), 2);
        }
        return Input_Image;
    }

希望这有帮助,

干杯,

克里斯