【Emgu CV教程】2.4、基本方法之绘制标记的函数DrawMarker()

当我们在进行图像处理时,有时候需要在图像上的某个重要点、形状、轮廓进行标注,这时候就可以使用Emgu CV的DrawMarker()函数了。

官方定义如下:

public static void DrawMarker(
    IInputOutputArray img, // 输入的图像
    Point position,  //标记符的坐标
    MCvScalar color, // 标记符的颜色,BGR颜色格式
    MarkerTypes markerType, //标记符的种类
    int markerSize = 20, // 标记符尺寸,默认20
    int thickness = 1, // 标记符线条宽度,默认1,值越标记符越粗
    LineType lineType = LineType.EightConnected // 线型(4邻域或8邻域,默认8邻域)
)

标记符共有以下几种:

public enum MarkerTypes
{
    //
    //     A crosshair marker shape,十字线(横竖两根线)
    Cross,

    //
    //     A 45 degree tilted crosshair marker shape,交叉线(45斜着两根线)
    TiltedCross,

    //
    //     A star marker shape, combination of cross and tilted cross,米字线(横竖加斜着共四根线)
    Star,

    //
    //     A diamond marker shape,钻石型,就是旋转45度的正方形
    Diamond,

    //
    //     A square marker shape,正方形
    Square,

    //
    //     An upwards pointing triangle marker shape,尖角向上的三角形
    TriangleUp,

    //
    //     A downwards pointing triangle marker shape,尖角向下的三角形
    TriangleDown
}

下面开始画图,在lena.jpg中画三行标记符,每一行显示7中不同的符号,并用不同的颜色显示每一行标记符,第一行标记符1个像素宽度,第二行标记符2个像素宽度,第三行标记符5个像素宽度。效果如下: 

代码如下:

Mat m = srcMat.Clone();
CvInvoke.DrawMarker(m, new System.Drawing.Point(40, 100), new MCvScalar(255, 0, 0), MarkerTypes.Cross, 20, 1, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(110, 100), new MCvScalar(255, 0, 0), MarkerTypes.TiltedCross, 20, 1, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(180, 100), new MCvScalar(255, 0, 0), MarkerTypes.Star, 20, 1, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(250, 100), new MCvScalar(255, 0, 0), MarkerTypes.Diamond, 20, 1, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(320, 100), new MCvScalar(255, 0, 0), MarkerTypes.Square, 20, 1, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(390, 100), new MCvScalar(255, 0, 0), MarkerTypes.TriangleUp, 20, 1, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(460, 100), new MCvScalar(255, 0, 0), MarkerTypes.TriangleDown, 20, 1, LineType.FourConnected);

CvInvoke.DrawMarker(m, new System.Drawing.Point(40, 250), new MCvScalar(0, 255, 0), MarkerTypes.Cross, 40, 2, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(110, 250), new MCvScalar(0, 255, 0), MarkerTypes.TiltedCross, 40, 2, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(180, 250), new MCvScalar(0, 255, 0), MarkerTypes.Star, 40, 2, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(250, 250), new MCvScalar(0, 255, 0), MarkerTypes.Diamond, 40, 2, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(320, 250), new MCvScalar(0, 255, 0), MarkerTypes.Square, 40, 2, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(390, 250), new MCvScalar(0, 255, 0), MarkerTypes.TriangleUp, 40, 2, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(460, 250), new MCvScalar(0, 255, 0), MarkerTypes.TriangleDown, 40, 2, LineType.FourConnected);

CvInvoke.DrawMarker(m, new System.Drawing.Point(40, 400), new MCvScalar(0, 0, 255), MarkerTypes.Cross, 60, 5, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(110, 400), new MCvScalar(0, 0, 255), MarkerTypes.TiltedCross, 60, 5, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(180, 400), new MCvScalar(0, 0, 255), MarkerTypes.Star, 60, 5, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(250, 400), new MCvScalar(0, 0, 255), MarkerTypes.Diamond, 60, 5, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(320, 400), new MCvScalar(0, 0, 255), MarkerTypes.Square, 60, 5, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(390, 400), new MCvScalar(0, 0, 255), MarkerTypes.TriangleUp, 60, 5, LineType.FourConnected);
CvInvoke.DrawMarker(m, new System.Drawing.Point(460, 400), new MCvScalar(0, 0, 255), MarkerTypes.TriangleDown, 60, 5, LineType.FourConnected);

原创不易,请勿抄袭。共同进步,相互学习。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值