Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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# EmguCV中drawMarker的等价物是什么?_C#_Opencv_Emgucv - Fatal编程技术网

C# EmguCV中drawMarker的等价物是什么?

C# EmguCV中drawMarker的等价物是什么?,c#,opencv,emgucv,C#,Opencv,Emgucv,在OpenCV中,有drawMarker函数用于在图像中的给定位置绘制标记 我在EmguCV上找不到这个函数,那么EmguCV中的drawMarker有什么等价物呢?我需要标记Mat看起来这个函数drawMarker在EmguCV代码中并不明确存在,尽管它出现在第1732到1795行中,所以我认为唯一的解决方案是将它作为函数添加到代码中 /// <summary> /// Draws a marker on a given position in the image. /// <

在OpenCV中,有
drawMarker
函数用于在图像中的给定位置绘制标记


我在EmguCV上找不到这个函数,那么EmguCV中的drawMarker有什么等价物呢?我需要标记
Mat

看起来这个函数
drawMarker
在EmguCV代码中并不明确存在,尽管它出现在第1732到1795行中,所以我认为唯一的解决方案是将它作为函数添加到代码中

/// <summary>
/// Draws a marker on a given position in the image.
/// </summary>
/// <param name="img">The image.</param>
/// <param name="position">The point where the crosshair is positioned.</param>
/// <param name="color">Line color.</param>
/// <param name="markerType">The specific type of marker you want to use: 0 - Crosshair marker. 1 - 45 degree tilted crosshair marker. 2 - Star marker. 3 - Diamond marker. 4 - Upwards pointing triangle marker. 5 - Downwards pointing triangle marker.</param>
/// <param name="markerSize">The length of the marker axis [default = 20 pixels].</param>
/// <param name="thickness">Line thickness.</param>
/// <param name="line_type">Type of the line: -1 - Filled. 4 - 4-connected line. 8 - 8-connected line. 16 - Anti-aliased line.</param>
private void DrawMarker(IInputOutputArray img, Point position, MCvScalar color, MarkerType markerType, int markerSize, int thickness, LineType line_type)
{
    switch (markerType)
    {
        // The cross marker case
        case MarkerType.MarkerCross:
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y), new Point(position.X + markerSize / 2, position.Y), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X, position.Y - markerSize / 2), new Point(position.X, position.Y + markerSize / 2), color, thickness, line_type);
            break;
        // The tilted cross marker case
        case MarkerType.MarkerTiltedCross:
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y - markerSize / 2), new Point(position.X + markerSize / 2, position.Y + markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X + markerSize / 2, position.Y - markerSize / 2), new Point(position.X - markerSize / 2, position.Y + markerSize / 2), color, thickness, line_type);
            break;
        // The star marker case
        case MarkerType.MarkerStar:
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y), new Point(position.X + markerSize / 2, position.Y), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X, position.Y - markerSize / 2), new Point(position.X, position.Y + markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y - markerSize / 2), new Point(position.X + markerSize / 2, position.Y + markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X + markerSize / 2, position.Y - markerSize / 2), new Point(position.X - markerSize / 2, position.Y + markerSize / 2), color, thickness, line_type);
            break;
        // The diamond marker case
        case MarkerType.MarkerDiamond:
            CvInvoke.Line(img, new Point(position.X, position.Y - markerSize / 2), new Point(position.X + markerSize / 2, position.Y), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X + markerSize / 2, position.Y), new Point(position.X, position.Y + markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X, position.Y + markerSize / 2), new Point(position.X - markerSize / 2, position.Y), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y), new Point(position.X, position.Y - markerSize / 2), color, thickness, line_type);
            break;
        // The square marker case
        case MarkerType.MarkerSquare:
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y - markerSize / 2), new Point(position.X + markerSize / 2, position.Y - markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X + markerSize / 2, position.Y - markerSize / 2), new Point(position.X + markerSize / 2, position.Y + markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X + markerSize / 2, position.Y + markerSize / 2), new Point(position.X - markerSize / 2, position.Y + markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y + markerSize / 2), new Point(position.X - markerSize / 2, position.Y - markerSize / 2), color, thickness, line_type);
            break;
        // The triangle up marker case
        case MarkerType.MarkerTriangleUp:
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y + markerSize / 2), new Point(position.X + markerSize / 2, position.Y + markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X + markerSize / 2, position.Y + markerSize / 2), new Point(position.X, position.Y - markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X, position.Y - markerSize / 2), new Point(position.X - markerSize / 2, position.Y + markerSize / 2), color, thickness, line_type);
            break;
        // The triangle down marker case
        case MarkerType.MarkerTriangleDown:
            CvInvoke.Line(img, new Point(position.X - markerSize / 2, position.Y - markerSize / 2), new Point(position.X + markerSize / 2, position.Y - markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X + markerSize / 2, position.Y - markerSize / 2), new Point(position.X, position.Y + markerSize / 2), color, thickness, line_type);
            CvInvoke.Line(img, new Point(position.X, position.Y + markerSize / 2), new Point(position.X - markerSize / 2, position.Y - markerSize / 2), color, thickness, line_type);
            break;
        // If any number that doesn't exist is entered as marker type, draw a cross marker, to avoid crashes
        default:
            DrawMarker(img, position, color, MarkerType.MarkerCross, markerSize, thickness, line_type);
            break;
    }
}

它作为
DrawMarker
函数添加到
CvInvoke
类中,该函数位于Git commit中:

它将包含在下一个EmguCV版本中

/// <summary>
/// Possible set of marker types used for the DrawMarker function
/// </summary>
enum MarkerType
{
    /// <summary>
    /// A crosshair marker shape
    /// </summary>
    MarkerCross = 0,
    /// <summary>
    /// A 45 degree tilted crosshair marker shape
    /// </summary>
    MarkerTiltedCross = 1,
    /// <summary>
    /// A star marker shape, combination of cross and tilted cross
    /// </summary>
    MarkerStar = 2,
    /// <summary>
    /// A diamond marker shape
    /// </summary>
    MarkerDiamond = 3,
    /// <summary>
    /// A square marker shape
    /// </summary>
    MarkerSquare = 4,
    /// <summary>
    /// An upwards pointing triangle marker shape
    /// </summary>
    MarkerTriangleUp = 5,
    /// <summary>
    /// A downwards pointing triangle marker shape
    /// </summary>
    MarkerTriangleDown = 6
}