java - 如何对openCV中的图片应用高斯模糊?

标签 java android opencv gaussianblur

我是 openCV 的初学者,所以如果我的问题很愚蠢,请原谅。基本上我试图在 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)

最佳答案

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)

public static void GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX, double sigmaY)

ksize - Gaussian kernel size. ksize.width and ksize.height can differ but they both must be positive and odd. Or, they can be zero's and then they are computed from sigma*.

您传递的内核大小为 2、2,这不是奇数。

使用这样的东西:

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

关于java - 如何对openCV中的图片应用高斯模糊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52464299/

相关文章:

python - 导入cv2.py错误;无法安装 Python cv2

java - 用数组填充 HashMap

java - 必须为该对象类型的实例覆盖对象的 .equals 方法,以便将它们用作 HashMap 中的键

java - Android:将 Parcelable 对象传递给另一个 Activity 时出错

java - Mockito 验证在第二个单元测试中失败

python - 如何将 OpenNI VideoFrame 转换为 OpenCV Mat 数据结构?

java - Gradle -compileTestGroovy 无法解析主应用程序类

java - 在 Spring MVC(使用 hibernate Validator)中提交带有无效数据的表单时发送语法错误的请求

Android studio 深度链接具体应用权限设置

opencv - 如何从opencv中的矩阵导出Derivation