运行OpenCV图像叠加教程时samples::findFile()报错如何解决?
OpenCV调用
samples::findFile报错问题排查方案 可按以下顺序排查问题:
- 版本兼容性问题
samples::findFile是OpenCV 3.3版本才正式加入cv::samples命名空间的公共接口,如果你本地使用的是3.2及更早版本的OpenCV,会直接报接口未定义的错误。
解决方法:
- 升级OpenCV到3.3以上的稳定版本
- 临时规避可以直接弃用该接口,传入图片的绝对路径/相对路径到
imread即可,比如imread("./LinuxLogo.jpg")
- 头文件缺失问题
部分版本的OpenCV中,samples相关的声明除了opencv2/core/utility.hpp外,还依赖核心头文件,你可以在现有头文件中额外添加:
#include <opencv2/core.hpp>
重新编译验证是否解决问题。
- 链接配置错误问题
如果编译时报的是未定义的引用类错误,通常是链接器没有找到对应的实现库导致的:
- Windows环境下检查项目链接器配置,确认已添加对应版本的
opencv_corexxx.lib依赖 - Linux/Mac环境下检查编译参数,确认添加了
-lopencv_core链接参数
- 自定义编译OpenCV功能缺失
如果你是自行从源码编译的OpenCV,编译时如果没有勾选BUILD_opencv_samples、INSTALL_C_EXAMPLES相关选项,samples模块的功能不会被编译进核心库,也会导致调用失败。
解决方法:重新编译OpenCV,勾选上述两个编译选项,安装完成后重新配置项目的OpenCV路径即可。
临时替代方案
如果不需要复用OpenCV自带的示例图片检索逻辑,直接把LinuxLogo.jpg和WindowsLogo.jpg放到项目生成的可执行文件同级目录下,将代码中samples::findFile的调用直接删除,改成:
src1 = imread("LinuxLogo.jpg"); src2 = imread("WindowsLogo.jpg");
即可正常运行,功能完全一致。
内容的提问来源于stack exchange,提问作者Daniel Surizon
相关产品推荐
相关产品推荐

