7

我发布了我的代码的一小部分,因为我不断收到一个我似乎无法摆脱的奇怪错误。问题可以在这一行找到:Imgproc.GaussianBlur(mGray, mGray, new Size (5,5), 2.2, 2);

public Mat onCameraFrame(Mat inputFrame) {
    mGray = new Mat();
    Imgproc.cvtColor(mRgba, mGray, Imgproc.COLOR_RGBA2GRAY);    
    // doing a gaussian blur prevents getting a lot of false hits
    Imgproc.GaussianBlur(mGray, mGray, new Size (5,5), 2.2, 2);
    // Values 3 and 4are the LowerThreshold and UpperThreshold.
    Imgproc.Canny(inputFrame, mIntermediateMat, 80, 100);
    Imgproc.cvtColor(mIntermediateMat,mRgba, Imgproc.COLOR_GRAY2BGRA, 4);
    return mIntermediateMat;
}

我从 Eclipse 得到的错误是:

The method GaussianBlur(Mat,Mat,Size,double,double) in 
the type imgproc is not applicable for the arguments (Mat,Mat,CameraSize,int,int)

我正在使用 tutorial3 Camera-control 的编辑版本(Android 版本 2.4.4 的 OpenCV),其中输出显示为 Canny 的边缘检测。我需要 GaussianBlur 来去除一些较小的细节。有谁知道这行代码到底出了什么问题?

4

2 回答 2

4

这段代码工作正常。只需根据需要重新排序参数。

Imgproc.GaussianBlur(mGray, mGray, new Size(15,15),50);

大小意味着您将使用它作为内核大小。内核大小也必须是奇数!图 50 显示了 X 方向的核标准偏差。

公式 : sigma = 0.3 * ((kSize-1)*0.5 - 1) + 0.8

这里 sigma 通过 50 所以sigmaX = sigmaY = 50

于 2013-05-04T11:58:38.693 回答
2

我从 Alexander Smorkalov 那里得到了这个解决方案,它奏效了。只需更改 Imgproc.GaussianBlur(mGray, mGray, new Size (5,5), 2.2, 2); to Imgproc.GaussianBlur(mGray, mGray, new org.opencv.core.Size (5,5), 2.2, 2);

于 2013-03-06T17:25:06.743 回答