对于用 3.x 版本的 Emgu 编写的代码,我不想添加额外的 dll 来向后兼容 2.x 版本的 Emgu。正如@Константин Марков 在他的回答中指出的那样,MCvFont 不再是 Emgu 3.x 版本中库的一部分。
我假设您的最终目标是在图像中写一些文本。因此,我不介意更改代码,您需要重写它才能使用 CvInvoke.PutText 方法来实现该目标。
上述方法根据官方文档page,CvInvoke.PutText
使用指定的字体和颜色渲染图像中的文本。这
打印的文本被 ROI 矩形剪裁。不属于的符号
将指定字体替换为矩形符号。
这是 C# 中的方法签名
public static void PutText(
IInputOutputArray img,
string text,
Point org,
FontFace fontFace,
double fontScale,
MCvScalar color,
int thickness = 1,
LineType lineType = LineType.EightConnected,
bool bottomLeftOrigin = false
)
下面是方法中各个参数的说明
- img
- 类型:
Emgu.CV.IInputOutputArray
- 说明:输入图片
- 文本
- 类型:
System.String
- 描述:要打印的字符串
- 组织
- 类型:
System.Drawing.Point
- 说明:第一个字母的左下角坐标
- fontFace
- 类型:
Emgu.CV.CvEnum.FontFace
- 说明:字体类型。
- 字体比例
- 类型:
System.Double
- 说明:字体比例因子乘以特定字体的基本大小。
- 颜色
- 类型:
Emgu.CV.Structure.MCvScalar
- 说明:文字颜色
- 厚度(可选)
- 类型:
System.Int32
- 描述:用于绘制文本的线条粗细。
- lineType(可选)
- 类型:
Emgu.CV.CvEnum.LineType
- 说明:线型
- bottomLeftOrigin(可选)
- 类型:
System.Boolean
- 描述:当为真时,图像数据原点位于左下角。否则,它位于左上角。
这是直接取自source的代码示例
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.CV.UI;
using System.Drawing;
...
//Create a 3 channel image of 400x200
using (Mat img = new Mat(200, 400, DepthType.Cv8U, 3))
{
img.SetTo(new Bgr(255, 0, 0).MCvScalar); // set it to Blue color
//Draw "Hello, world." on the image using the specific font
CvInvoke.PutText(
img,
"Hello, world",
new System.Drawing.Point(10, 80),
FontFace.HersheyComplex,
1.0,
new Bgr(0, 255, 0).MCvScalar);
//Show the image using ImageViewer from Emgu.CV.UI
ImageViewer.Show(img, "Test Window");
}