Android端OpenCV3.4.1调用Imgproc.boundingRect报NoSuchMethodError如何解决?
问题根因
这个错误是方法签名匹配失败导致的,核心原因有两个:
- OpenCV 3.x和4.x版本对
boundingRect方法的归属类做了调整:你使用的3.4.1属于3.x版本,该方法此时归属org.opencv.core.Core类,直到4.0之后才被移到org.opencv.imgproc.Imgproc类下,你调用了错误类下的方法所以找不到对应实现。 - 项目存在多版本OpenCV依赖冲突,运行时加载的Imgproc类来自和你编译时不一致的OpenCV版本,没有对应方法。
解决方案
- 优先调整调用代码:将
Imgproc.boundingRect(contours.get(i))修改为Core.boundingRect(contours.get(i)),同时确认导入的Core类路径为org.opencv.core.Core,90%以上的同版本场景修改后即可恢复正常。 - 排查依赖冲突:执行
./gradlew :app:dependencies(Windows系统替换为gradlew.bat :app:dependencies)命令,检索所有opencv相关依赖,排除掉第三方库间接引入的其他版本OpenCV,确保全局仅使用3.4.1版本。 - 确认参数类型正确:保证
findContours输出的contours是List<MatOfPoint>类型,不要将contours.get(i)强制转换为Mat类型后传入,避免方法签名匹配失败。 - 重新导入官方SDK:如果上述操作无效,删除现有OpenCV依赖,下载官方OpenCV 3.4.1 Android SDK重新作为Module导入项目,避免使用被篡改的第三方远程OpenCV依赖包。
内容的提问来源于stack exchange,提问作者F3RNI
相关产品推荐
相关产品推荐

