OpenCV的imread函数无法读取图片,我哪里操作出错了?
解决OpenCV imread无法读取文件的问题
可行的排查与解决步骤:
改用绝对路径测试
替换代码中的相对路径为文件的绝对路径,比如/home/xxx/Projects/Convolution/Images/NewYork.jpg(替换为你实际的文件路径),彻底排除相对路径的歧义问题。修改后的代码片段:std::string path = "/home/xxx/Projects/Convolution/Images/NewYork.jpg";确认程序运行的工作目录
若你在单独的build目录下编译运行程序,相对路径的基准是build目录而非源码目录。比如你的源码结构是:Convolution/ ├── main.cpp ├── CMakeLists.txt └── Images/ └── NewYork.jpg当执行
mkdir build && cd build && cmake .. && make && ./Convolution时,程序会在build目录下查找Images/NewYork.jpg,而非源码目录下的对应文件夹。解决方式:- 将
Images文件夹复制到build目录; - 或在CMakeLists.txt中添加配置,让可执行文件生成在源码目录:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
- 将
检查文件读取权限
执行命令查看文件权限:ls -l /path/to/Images/NewYork.jpg确保当前用户拥有读权限(权限位包含
r)。若没有,执行:chmod +r /path/to/Images/NewYork.jpg验证文件完整性
用系统图片查看器打开图片,确认文件未损坏。也可通过命令检查文件格式有效性:file /path/to/Images/NewYork.jpg正常输出应包含
JPEG image data字样。确认OpenCV imgcodecs模块链接正常
执行命令检查OpenCV链接库:pkg-config --libs opencv4确保输出中包含
-lopencv_imgcodecs。若缺失,说明OpenCV安装不完整,需重新安装包含imgcodecs模块的版本。
内容的提问来源于stack exchange,提问作者Dragos Tanasa
相关产品推荐
相关产品推荐

