背景
由于项目需要用OpenCV2.3的视频处理功能,
代码如下:
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(){
cv::VideoCapture movie;
string path="/your/movie/path/test.avi";
movie.open(path);
cout<<movie.isOpened()<<endl;
if (!movie.isOpened()) {
std::cerr << path << "video not found" << std::endl;
return -1;
}
return 0;
}
发现视频总是打不开。查找网上资料后发现是ffmpeg没有安装。
查看opencv-2.3.0/3rdparty/CMakeLists.txt源码知道Linux版的OpenCV中3rdparty默认没有加入ffmpeg。
# opencv-2.3.0/3rdparty/CMakeLists.txt文件内容
if(NOT ZLIB_FOUND)
add_subdirectory(zlib)
endif()
if(WITH_JASPER AND NOT JASPER_FOUND)
add_subdirectory(libjasper)
endif()
if(WITH_JPEG AND NOT JPEG_FOUND)
add_subdirectory(libjpeg)
endif()
if(WITH_PNG AND NOT PNG_FOUND)
add_subdirectory(libpng)
endif()
if(WITH_TIFF AND NOT TIFF_FOUND)
add_subdirectory(libtiff)
endif()
if(WIN32)
add_subdirectory(ffmpeg)
endif()
# 可以看到只有WIN32位系统才会包含ffmpeg
解决方案
安装ffmpeg
OpenCV 2.3版本对应的ffmpeg为0.7,从Github上克隆分支为0.7的代码,然后进行编译。测试通过后再重新编译OpenCV 2.3,同时打开WITH_FFMPEG选项。
OpenCV 2.3引入到CMake工程中见这篇简书。
网友评论