Emgu 在调用 AdaptiveThreshold 函数后意外退出

Emgu exit unexpectedly after calling AdaptiveThreshold function

我是 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 Dll 添加到我的项目引用 Emgu.CV, Emgu.CV.UI, Emgu.Util 我还将我的目标平台设置为 x86 我正在 visual studio 2013 windows 8 下工作。

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

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

参数:

src – 源 8 位单通道图像。

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

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

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 才能让您的功能发挥作用。