【问题标题】:MCvFont library is missing at Emgu 3.0Emgu 3.0 中缺少 MCvFont 库
【发布时间】:2016-04-28 08:46:18
【问题描述】:

我在 Visual Studio 2010 上将我的项目与 Emgu 3.0 集成,并且我正在开发检测对象项目,但是当我使用 MCvFont 如下行时,由于缺少库,该库已从Emgu 的最新版本还是什么?

 MCvFont f2 = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_TRIPLEX, 1.0, 1.0);

【问题讨论】:

  • 您是否在您的 Visual Studio 项目中添加了对该库的引用?您的代码顶部是否有“using ...”语句,包括相关库?
  • 我添加了在我计算机上安装的 Emgu 文件夹中找到的所有引用,然后是的,我调用了所有必需的库,但是这个库丢失了我通过代码调用它时找不到它跨度>
  • 注意:我在 mac 上使用的是 Windows 虚拟机。

标签: c# visual-studio image-processing emgucv


【解决方案1】:

对于用 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");
}

【讨论】:

    【解决方案2】:

    CvInvoke.PutText(img,
    "Hello, world", 
    new System.Drawing.Point(10, 80), 
    FontFace.HersheyComplex, 1.0, 
    new Bgr(0, 255, 0).MCvScalar);
    

    参考: http://www.emgu.com/wiki/index.php/Hello_World_in_CSharp#Emgu_CV_3.0_2

    【讨论】:

    • 你必须给出一个简单的解释
    【解决方案3】:

    Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_TRIPLEX 在 Emgu 3.0 中可以是 Emgu.CV.CvEnum.FontFace.HersheyTriplex

    MCvFont 出现在 Emgu_2.4.10 的 Emgu.CV.Structure 中, 但它在 Emgu_3.0.0 中丢失了。我在 emgu 版本历史中检查了这一点。

    您可以通过添加到 Emgu_2.4.10 中的参考 Emgu.CV 来修复此代码, 抓住这个 dll https://dropmefiles.com/AZvmM

    将2.4.x代码转换为3.0的说明可以找到http://www.emgu.com/wiki/index.php/Tutorial#Upgrading_from_Emgu_CV_2.x_to_3.x

    你做面部或眼睛识别吗? 这是我在 stackoverflow 上的第一个答案 :)

    【讨论】:

    • 真的是我最后用Emgu 2.4解决了这个错误和3.0版本出现的另一个错误。关于你的问题,不,我不做脸或眼睛。只有我正在检测图像中的对象。感谢您在堆栈溢出世界中的第一个答案:)
    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 2021-02-20
    • 2015-11-09
    • 2014-05-05
    相关资源
    最近更新 更多