【问题标题】:Emgu exit unexpectedly after calling AdaptiveThreshold functionEmgu 在调用 AdaptiveThreshold 函数后意外退出
【发布时间】:2015-03-27 03:43:03
【问题描述】:

我对 emgu 完全陌生。我一直在寻找这个问题的解决方案,但我找不到任何解决方案。我正在尝试使用内置的自适应阈值函数对给定图像进行阈值处理,但程序无一例外地退出

代码:

 public Image<Gray, byte> AdaptiveThreshold(Image<Bgr, byte> bmp, int windowSize)
    {
        Image<Gray, byte> gray = new Image<Gray, byte>(bmp.ToBitmap());

        Image<Gray, byte> bw = gray.ThresholdAdaptive(new Gray(255), Emgu.CV.CvEnum.ADAPTIVE_THRESHOLD_TYPE.CV_ADAPTIVE_THRESH_MEAN_C, Emgu.CV.CvEnum.THRESH.CV_THRESH_OTSU, windowSize, new Gray(0.03));
        return bw;
    }

函数调用:

this.pictureBox1.Image = r.AdaptiveThreshold(this.bmp, 15).ToBitmap(); // here where the application exit with no error and with no output in pictureBox1

r is an object of class which contains AdaptiveThreshold defined above

我将所有未管理的二进制文件从 bin 文件夹 emgucv-windows-universal-cuda 2.9.0.1922\bin\x86 复制到我的调试文件夹中,我还将 Emgu Dlls 添加到我的项目引用 Emgu.CV、Emgu.CV.UI , Emgu.Util 我还将我的目标平台设置为 x86 我正在 windows 8 下的 Visual Studio 2013 上工作。

【问题讨论】:

  • 您的问题到底是什么?当您的应用程序毫无例外地退出时,我似乎不仅仅是一个问题。我认为缺少一些细节。预期的结果是什么?还有一些调用此函数的代码可能会有所帮助

标签: c# opencv dll build emgucv


【解决方案1】:

似乎由于某种原因,当使用Emgu.CV.CvEnum.THRESH.CV_THRESH_OTSU 作为自适应阈值的阈值方法时,应用程序确实退出了。我还不知道具体原因。

虽然通过阅读 Open CV 关于自适应阈值功能的文档,我注意到这不是传递给此函数的有效值。如在this 页面上找到的:

参数:

src – 源 8 位单通道图像。

dst – 与 src 大小和类型相同的目标图像。

ma​​xValue – 分配给条件为的像素的非零值 使满意。请参阅下面的详细信息。

adaptiveMethod – 要使用的自适应阈值算法,ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C。请参阅下面的详细信息。

thresholdType – 阈值类型,必须是 THRESH_BINARY 或 THRESH_BINARY_INV 。 blockSize – 用于计算像素阈值的像素邻域的大小:3、5、7 等。

C – 从平均值或加权平均值中减去常数(请参阅下面的详细信息)。通常,它是正数,但也可能是零或负数。

因此,您必须将使用的 thresholdType 调整为 Emgu.CV.CvEnum.THRESH.CV_THRESH_BINARYEmgu.CV.CvEnum.THRESH.CV_THRESH_BINARY_INV 才能让您的功能正常工作。

【讨论】:

  • 谢谢你的努力,我真的很感激
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 2022-01-18
  • 2017-08-14
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多