背景

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似乎也没用。

路径没有空格,防止命令行参数错误。

步骤

  1. 安装好vcpkg和找好访问github的方法。

  2. vcpkg install opencv[ffmpeg]:x64-windows会安装4.10版本,不能用。要改变vcpkg根目录使用的port版本要使用git命令回退版本,跳过。使用清单模式在项目上安装opencv。

  3. 在visual studio项目命令行。

    vcpkg new --application
    
  4. 手动编辑vcpkg.json(项目清单)。

    {
        "dependencies":[
            {
                "name":"opencv",
                "features":[
                    "ffmpeg"
                ]
            }
        ],
        "overrides":[
            {
                "name":"opencv",
                "version":"3.4.3-9"
            }
        ]
    }
    
  5. 在vcxproj文件中添加设置使用清单模式(在VS没有安装vcpkg时)。

    <PropertyGroup Label="Vcpkg">
      <VcpkgEnableManifest>true</VcpkgEnableManifest>
    </PropertyGroup>
    
  6. 配置vcpkg到msbuild。

    vcpkg integrate install
    
  7. 安装opencv[ffmpeg]包文件到项目。

    vcpkg install
    
  8. 打开sln,此时会自动把项目目录中的包含文件目录、依赖项目录等添加到项目属性。可以正常编写程序并调用函数。

  9. 示例程序:

    #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();
    }
    

2656bbaa-39b0-44b5-a507-d454309e79bc.png

缺陷

  • 相比正常安装方式,不能确定高版本不能编译出opencv_ffmpeg.dll的原因和解决方案。

  • vcpkg通常只用在windows。

  • 项目体积大,vs体积大,vcpkg目录体积大。

  • 配置项目环境巨慢。

结论

还能用。

参考文献

vcpkg安装的opencv读取视频 - 简书

教程:从清单文件安装依赖项 | Microsoft Learn

标签: none

添加新评论