官方的 opencv android 版本不包含 opencv_contrib 模块,自己构建它们并不简单。 幸运的是,感谢 chaoyangnz,我们不必建造大楼。
但是,在这些构建中,没有用于创建 WLSDisparityFilter 对象的 JNI 定义,因此,尽管存在底层 ximgproc 库,但您实际上无法创建用于过滤立体深度图的 WLS 过滤器。
如何在 Android 上使用 WLSDisparityFilter?
幸运的是,底层库已经存在,因此您只需添加 java 接口即可使用它们。
打开:
/src/main/java/org/opencv/ximgproc/DisparityWLSFilter.java
文件。
添加以下方法:
public DisparityWLSFilter createDisparityWLSFilter(StereoMatcher matcher_left) {
DisparityWLSFilter filter = createDisparityWLSFilter_0(matcher_left);
return filter;
}
就是这样! 现在您可以创建并使用 WLSDisparity 过滤器。 请注意,您必须使用完整版本的
filter
函数。 Kotlin 中是这样的:
val disparityWLSFilter = createDisparityWLSFilter(stereoSGBM)
disparityWLSFilter.lambda = PrefHelper.getLambda()
disparityWLSFilter.sigmaColor = PrefHelper.getSigma()
disparityWLSFilter.filter(disparityMatLeft, leftMat,
disparityMatFiltered, disparityMatRight, Rect(0, 0,
disparityMatLeft.cols(), disparityMatLeft.rows()), rightMat)
我只使用 opencv_contrib 中的这个模块,尽管我想象其他缺失的 ximgproc 函数和其他 contrib 模块可以以大致相同的方式启用。
希望这可以帮助其他人将厚实的像素视差图变成漂亮的深度图!