由于opencv的PutText函数无法在图片上输入中文,所以可以将Mat类先转换为Image,然后利用Graphics的DrawString添加中文,然后再将Image转换为Mat。其中,Image转换为Mat需要用OpenCvSharp.Extensions库的BitmapConverter实现。
using OpenCvSharp;
using OpenCvSharp.Extensions;
Mat PutText(Mat src, string text, int x, int y)
{
Mat dst;
System.Drawing.Image dstimg = new Bitmap(src.ToMemoryStream()) as System.Drawing.Image;
using (var g = Graphics.FromImage(dstimg))
{
Brush textBrush = new SolidBrush(Color.Green);
var font = new Font(FontFamily.GenericMonospace, 25, FontStyle.Bold);
g.DrawString(text, font, textBrush, x, y);
dst = BitmapConverter.ToMat((Bitmap)dstimg);
}
return dst;
}
调用示例:
src = PutText(src, tb.Text, tb.BoxPoints[0].X, tb.BoxPoints[0].Y);
图中绿色字为PutText写出来的效果。