C# EmguCV中drawMarker的等价物是什么?
在OpenCV中,有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. /// <
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
}