Câu hỏi Eclipse đưa ra lỗi khi sử dụng GaussianBlur với OpenCV cho Android


Tôi đăng một phần nhỏ của mã của tôi, gây ra tôi tiếp tục nhận được một lỗi lạ mà tôi dường như không thể thoát khỏi. Vấn đề có thể được tìm thấy trên dòng này: Imgproc.GaussianBlur (mGray, mGray, Kích thước mới (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;
}

Lỗi tôi nhận được từ Eclipse là:

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

Tôi đang sử dụng phiên bản chỉnh sửa của tutorial3 Camera-control (OpenCV cho Android phiên bản 2.4.4), nơi đầu ra được hiển thị dưới dạng phát hiện cạnh của Canny. Tôi cần GaussianBlur để loại bỏ một số chi tiết nhỏ hơn. Có ai biết chính xác những gì là sai trong dòng mã này?


7
2018-03-04 18:13


gốc




Các câu trả lời:


Mã này hoạt động tốt. Chỉ cần sắp xếp lại các thông số như bạn cần.

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

Kích thước có nghĩa là bạn sẽ sử dụng nó như là kích thước hạt nhân. Kích thước hạt nhân cũng phải là kỳ quặc! 50 cho thấy độ lệch chuẩn của hạt nhân theo hướng X.

Công thức : sigma = 0.3 * ((kSize-1)*0.5 - 1) + 0.8

Ở đây sigma được thông qua 50 nên sigmaX = sigmaY = 50


4
2018-05-04 11:58





Tôi đã nhận được giải pháp này từ Alexander Smorkalov, và nó đã hoạt động. Chỉ cần thay đổi Imgproc.GaussianBlur (mGray, mGray, Kích thước mới (5,5), 2,2, 2); tới Imgproc.GaussianBlur (mGray, mGray, mới org.opencv.core.Size (5,5), 2,2, 2);


2
2018-03-06 17:25