OpenCV中VideoCapture.isOpened()始终返回false问题求助
OpenCV VideoCapture无法打开本地MP4文件(isOpened()返回false)
问题场景
执行步骤:
- 进入
~/Projects/git-repo/opencv/test/目录执行cmake . - 执行
make命令 - 运行
./PlayVideo程序
程序输出:error reading video file
相关代码
PlayVideo.cpp
#include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<iostream> int main(void) { cv::VideoCapture capVideo; capVideo.open("/home/fateme/Projects/git-repo/opencv/test/osm.mp4"); if (!capVideo.isOpened()) { // if unable to open video file std::cout << "\nerror reading video file" << std::endl << std::endl; // show error message return(0); // and exit program } }
CMakeLists.txt
cmake_minimum_required(VERSION 2.8) project( DisplayImage ) find_package( OpenCV REQUIRED ) include_directories( ${OpenCV_INCLUDE_DIRS} ) add_executable( PlayVideo PlayVideo.cpp ) target_link_libraries( PlayVideo ${OpenCV_LIBS} )
排查与解决步骤
1. 验证视频文件本身
- 用
ls /home/fateme/Projects/git-repo/opencv/test/osm.mp4确认文件存在,路径拼写无错误 - 用系统播放器(如VLC)打开该视频,确认文件未损坏、格式可正常解析
2. 检查OpenCV的视频编解码器支持
OpenCV依赖FFmpeg等后端处理视频,若编译时未启用相关组件会导致读取失败:
- 执行
opencv_version --verbose,查看输出中是否包含FFmpeg: YES,以及H.264等MP4常用编解码器的支持信息 - 若缺少编解码器,需重新编译OpenCV,cmake阶段添加
-DWITH_FFMPEG=ON参数
3. 调整路径与权限
- 尝试改用相对路径
./osm.mp4,避免绝对路径的拼写或权限问题 - 执行
chmod +r /home/fateme/Projects/git-repo/opencv/test/osm.mp4,确保当前用户有文件读取权限
4. 极简代码测试
编写最小化测试代码,排除其他逻辑干扰:
#include <opencv2/opencv.hpp> #include <iostream> int main() { cv::VideoCapture cap("./osm.mp4"); if (!cap.isOpened()) { std::cout << "无法打开视频" << std::endl; return -1; } std::cout << "视频打开成功" << std::endl; cap.release(); return 0; }
重新编译运行,验证基础读取功能是否正常
5. 确认CMake编译配置
- 查看cmake执行时的输出,确认
find_package(OpenCV REQUIRED)成功找到正确版本的OpenCV库 - 若使用自定义编译的OpenCV,需确保
CMAKE_PREFIX_PATH指向正确的OpenCV安装目录
内容的提问来源于stack exchange,提问作者fatemeakbari
相关产品推荐
相关产品推荐

