代码之家  ›  专栏  ›  技术社区  ›  anonymous

如何将高斯模糊应用于openCV中的图片?

  •  2
  • anonymous  · 技术社区  · 6 年前

    我在这方面完全是个初学者 openCV 所以请原谅我的问题是愚蠢的。基本上我是想申请 gussianBlur 但它显示了一个奇怪的错误我不明白为什么?

    代码:

    Mat tmp = new Mat (bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC4);
    Utils.bitmapToMat(bitmap, tmp);
    //Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2HSV_FULL);
    Imgproc.GaussianBlur(tmp,tmp,new org.opencv.core.Size(2,2),0,0);
    Utils.matToBitmap(tmp,bitmap);
    imgView.setImageBitmap(null);
    imgView.setImageBitmap(bitmap);
    

    错误:

    CvException [org.opencv.core.CvException: cv::Exception: /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/imgproc/src/smooth.cpp:816: error: (-215) ksize.width > 0 && ksize.width % 2 == 1 && ksize.height > 0 && ksize.height % 2 == 1 in function cv::Ptr<cv::FilterEngine> cv::createGaussianFilter(int, cv::Size, double, double, int)]
        at org.opencv.imgproc.Imgproc.GaussianBlur_1(Native Method)
        at org.opencv.imgproc.Imgproc.GaussianBlur(Imgproc.java:533)
        at opengl.community.myopencvexample.MainActivity$3.onClick(MainActivity.java:82)
        at android.view.View.performClick(View.java:4478)
        at android.view.View$PerformClick.run(View.java:18698)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:149)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
        at dalvik.system.NativeStart.main(Native Method)
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Nabin Bhandari    6 年前

    GaussianBlur : https://docs.opencv.org/java/2.4.9/org/opencv/imgproc/Imgproc.html#GaussianBlur(org.opencv.core.Mat,%20org.opencv.core.Mat,%20org.opencv.core.Size,%20double,%20double)

    材料dst, 双西格马克斯, 双西格梅)

    ksize-高斯核大小。ksize.width和ksize.height可以不同,但它们都必须是正数和正数 古怪的 . 或者,它们可以是零,然后根据sigma*计算。

    传递2,2表示内核大小,这并不奇怪。

    Imgproc.GaussianBlur(tmp, tmp, new Size(3, 3), 0, 0);