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

时间:2015-01-28 09:40:25

标签: c# opencv dll build emgucv

我对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 我正在Windows 8下的visual studio 2013上工作。

1 个答案:

答案 0 :(得分:3)

似乎由于某种原因,当使用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,以使您的功能正常运作。