vcpkg安装opencv+ffmpeg
背景
opencv是主要用于计算机视觉、也可用于图像绘制和处理的包,可用c++和python等调用。
ffmpeg是用于视频处理等的包,opencv可以用ffmpeg处理一些视频文件并提取视频帧进行处理,再生成视频。
如果ffmpeg版本不合适则opencv不能处理视频文件,而ffmpeg本身语法实在太难,在只提取视频帧的情况下最好不要学ffmpeg。
使用opencv.org下载的opencv要和合适版本的ffmpeg同时编译才能使用,版本对应要手动控制。
vcpkg安装带ffmpeg特性的opencv,是不用手动调节ffmpeg版本与opencv版本对应的,只要选择合适版本的opencv即可。
目的
使用vcpkg安装opencv[ffmpeg]并成功打开mp4视频文件。
涉及到的目录和文件:
-
${VCPKG_ROOT}\ports\
-
${VCPKG_ROOT}\versions\
-
${SolutionDir}\vcpkg.json
-
${SolutionDir}\vcpkg_installed\
注意事项
通常的安装方式安装的vcpkg,都会使用Git包注册表,使用时需科学上网到github。会自动使用http代理。
最新版本不能用,使用3.4.3-9版本的opencv。opencv2没有ffmpeg,opencv4似乎也没用。
路径没有空格,防止命令行参数错误。
步骤
-
安装好vcpkg和找好访问github的方法。
-
vcpkg install opencv[ffmpeg]:x64-windows
会安装4.10版本,不能用。要改变vcpkg根目录使用的port版本要使用git命令回退版本,跳过。使用清单模式在项目上安装opencv。 -
在visual studio项目命令行。
vcpkg new --application
-
手动编辑vcpkg.json(项目清单)。
{ "dependencies":[ { "name":"opencv", "features":[ "ffmpeg" ] } ], "overrides":[ { "name":"opencv", "version":"3.4.3-9" } ] }
-
在vcxproj文件中添加设置使用清单模式(在VS没有安装vcpkg时)。
<PropertyGroup Label="Vcpkg"> <VcpkgEnableManifest>true</VcpkgEnableManifest> </PropertyGroup>
-
配置vcpkg到msbuild。
vcpkg integrate install
-
安装opencv[ffmpeg]包文件到项目。
vcpkg install
-
打开sln,此时会自动把项目目录中的包含文件目录、依赖项目录等添加到项目属性。可以正常编写程序并调用函数。
-
示例程序:
#include<opencv2/opencv.hpp> int main() { cv::namedWindow("eg", cv::WINDOW_AUTOSIZE); cv::VideoCapture cap("2.mp4"); std::cout << cap.isOpened() << ' ' << cap.get(CV_CAP_PROP_FPS); double fps = cap.get(CV_CAP_PROP_FPS); cv::Mat frame; for (;;) { cap >> frame; if (frame.empty())break; cv::imshow("eg", frame); if (cv::waitKey(1000.0 / fps) >= 0)break; } cap.release(); }
缺陷
-
相比正常安装方式,不能确定高版本不能编译出opencv_ffmpeg.dll的原因和解决方案。
-
vcpkg通常只用在windows。
-
项目体积大,vs体积大,vcpkg目录体积大。
-
配置项目环境巨慢。
结论
还能用。