VS2022搭建FFMPEG + Opencv开发环境 + 如何打包项目让程序也能独立跑在其他人的电脑上?

VS2022搭建FFMPEG + Opencv开发环境 + 如何打包项目让程序也能独立跑在其他人的电脑上?

前言

本文的名字应该是我所写过的博客当中最长的,但内容以精简且保证实用为原则!

正文

首先是ffmpeg

环境搭建流程如下:

  1. 在网上下载已经被编译成动态库版的ffmpeg,我的是:ffmpeg-N-113099-g46775e64f8-win64-gpl-shared。

  2. 将 ffmpeg-N-113099-g46775e64f8-win64-gpl-shared/include 和 ffmpeg-N-113099-g46775e64f8-win64-gpl-shared/lib 两个目录都复制到项目源文件当中即和.vcxproj后缀的文件同一级。

  3. 将 ffmpeg-N-113099-g46775e64f8-win64-gpl-shared/bin目录下,所有的.dll后缀的文件复制到.vcxproj后缀的文件同一级目录中。

  4. 在vs2022中,右键项目,选择properties -> Configuration Properties -> VC++ Directories:

    1. 修改 General, 在Include Directories当中添加一项:./include。

    2. 修改 General, 在Library Directories当中添加:./lib。

  5. 选择properties -> Configuration Properties -> C/C++ -> General:

    1. 在Additional Include Directories中添加一项:./include。
  6. 选择properties -> Configuration Properties -> Linker -> General:

    1. 在Additional Library Directories中添加一项:./lib。
  7. 选择properties -> Configuration Properties -> Linker -> Input:

    1. 在Additional Dependencies中添加依赖库的名称:

          avcodec.libavformat.libavutil.libavdevice.libavfilter.libpostproc.libswresample.libswscale.lib
      
  8. 点击右下角的应用按钮,保存退出。

运行如下测试代码:

#include <iostream>extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc.hpp>int main()
{std::cout << "Hello World!\n";printf("%s\n", avcodec_configuration());return 0;
}

输出一堆有关ffmpeg的版本以及参数信息即为配置成功

然后是opencv的运行环境配置:

环境搭建流程如下:

  1. 同样可以在网上找到动态库版的opencv。

  2. 将 opencv/build/include 和 opencv\build\x64\vc15\lib 两个目录都复制到项目源文件当中即和.vcxproj后缀的文件同一级。(PS,如果项目目录因为引入其他头文件或库,include或lib目录已经存在,则将opencv/build/include和opencv\build\x64\vc15\lib下的所有文件手动复制到项目中对应的目录即可)

  3. 将 opencv\build\x64\vc15\bin 目录下,所有的.dll(更严谨一点是非.exe的所有文件)后缀的文件复制到.vcxproj后缀的文件同一级目录中。

  4. 重复上节3 ~ 5步骤。

  5. 选择properties -> Configuration Properties -> Linker -> Input:

    1. 在Additional Dependencies中添加依赖库的名称:

          opencv_world440.lib# 如果你需要同时安装opencv和ffmpeg的话,可以直接一次性添加如下依赖# avcodec.lib# avformat.lib# avutil.lib# avdevice.lib# avfilter.lib# postproc.lib# swresample.lib# swscale.lib# opencv_world440.lib
      
  6. 点击右下角的应用按钮,保存退出。

运行如下测试代码:

#include <opencv2/opencv.hpp>using namespace cv;int main() {const char* pic_path = "任意一张你电脑上的图片路径";Mat pic = imread(pic_path, 1);imshow("Hello World!", pic);waitKey();return 0;
}

可以看到用opencv的api成功显示了一张图片,即为配置成功。

在windows下对VS2022项目程序进行打包

最后就是对项目进行打包,实现让其有完整的依赖库,在其他人的电脑也能运行你的应用程序。 说简单点其实这个过程就各种动态库、静态库的拷贝。你找一台没任何环境的新电脑作为测试环境,让你的程序在它上面运行,运行的时候会崩溃,根据报错来一点一点将所缺失的库拷贝到应用程序所在的目录当中。 这里记录了一下只引入opencv和ffmpeg情况下打包的流程。当然微软还提供了更为强大的打包方式:Microsoft Visual Studio Installer Projects。本文所讲解的打包方式是为这些特定需求人群服务的:不需要花里胡朝的方式,只求方便的一个打包方式。

  1. 将上方菜单栏的Debug改成Release。

  2. 再次根据在配置ffmpeg和opencv时的过程重新配置项目的properties。

  3. 最后修改:properties -> Configuration Properties -> C/C++ -> Code Generation -> Runtime Library -> Multi-threaded DLL (/MD)

  4. 编译无报错

  5. 新建一个目录app

  6. 将项目根目录x64/Release/下所有文件拷贝到app

  7. 将前面配置的include、lib文件夹拷贝到app

  8. 将.dll文件拷贝到app

  9. 完成迁移,app可独立在任何人的电脑上运行。


本章完结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/883174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zabbix企业级分布式监控环境部署

“运筹帷幄之中&#xff0c;决胜千里之外”。在IT运维中&#xff0c;监控占据着重要的地位&#xff0c;按比例来算&#xff0c;说占30%一点也不为过。对IT运维工程师来说&#xff0c;构建一个真正可用的监控告警系统是一项艰巨的任务。在监控系统的开源软件中&#xff0c;可供选…

基于模型划分的云边协同推理算法

摘要 在网络状态和任务需求的动态变化下&#xff0c;为减少模型推理时延和计算成本&#xff0c;在软件定义网络( Software Defined Network&#xff0c;SDN) 中提出了一种基于模型划分的云边协同推理算法。通过构建复杂度预测器分配任务执行环境&#xff0c;采用深度Q网络(Dee…

国产标准数字隔离器的未来---克里雅半导体

标准数字隔离器是电信号隔离技术的重要组成部分&#xff0c;近年来取得了重大进展。随着工业自动化、汽车电子和电信等行业对更高性能的需求不断增长&#xff0c;国内数字隔离器制造商正在稳步赶上全球标准。本文讨论了数字隔离器技术的新兴趋势、材料创新的影响&#xff0c;以…

网站建设中需要注意哪些安全问题?----雷池社区版

服务器与应用安全指南 1. 服务器安全 1.1 操作系统安全 及时更新补丁&#xff1a;确保操作系统始终安装最新补丁&#xff0c;以防范系统漏洞。例如&#xff0c;Windows Server 定期推送安全更新&#xff0c;修复如远程代码执行等潜在威胁。优化系统服务配置&#xff1a;关闭不…

一家医药企业终止,收入依赖阿里健康,学术推广费快赶上净利润

知原药业终止原因如下&#xff1a;知原药业报告期三年的推广费用超3亿元&#xff0c;快赶上这三年累计3.68亿元的净利润了&#xff0c;交易所质疑其学术推广费单价合理性、是否存在销售返利。并且&#xff0c;公司研发费用率低于行业平均水平&#xff0c;在电商平台营销主要依赖…

pytorh学习笔记——cifar10(三)模仿VGGNet创建卷积网络

VGG16是由牛津大学视觉几何组&#xff08;Visual Geometry Group&#xff09;提出的一种深度卷积神经网络模型。 VGGNet 探索了卷积神经网络的深度与其性能之间的关系&#xff0c;成功地构筑了 16~19 层深的卷积神经网络&#xff0c;同时拓展性又很强&#xff0c;迁移到其它图片…

【LeetCode】11.盛最多水的容器

思路&#xff1a; 利用双指针法进行移动&#xff0c;一个在头一个在尾&#xff0c;此时宽度最宽&#xff0c;当宽度缩小时&#xff0c;高度发生变化&#xff0c;从而可以找到最大值。 代码&#xff1a; int maxArea(int* height, int heightSize) {int* left height;int* …

仿真学习 | Fluent版本迭代一览及选择指南

在计算机辅助工程&#xff08;CAE&#xff09;领域&#xff0c;软件版本的更新迭代&#xff0c;影响了工程师的工作效率、工作习惯和仿真精度&#xff0c;“如何选择软件版本”也永远是摆在每个初学者面前的第一个难题。 计算流体动力学&#xff08;CFD&#xff09;领域的领军…

嵌入式工程师必备——NTC曲线拟合

最近搞了一下NTC热敏电阻&#xff0c;打算和大家分享一下&#xff1b; 首先看NTC手册&#xff0c;25℃时是5K&#xff0c;温度系数B是3470&#xff0c;有一些NTC会直接给出公式&#xff0c;那种直接按照手册计算就好&#xff1b; 1、下面是温度和阻值对照表&#xff0c;这个表…

深度学习:YOLO目标检测和YOLO-V1算法损失函数的计算

简介 YOLO&#xff08;You Only Look Once&#xff09;是一种基于深度学习的目标检测算法&#xff0c;它的核心思想是将目标检测问题转化为一个回归问题&#xff0c;通过一个神经网络直接预测目标的类别和位置。 YOLO算法将输入图像分成SxS个网格&#xff0c;每个网格负责预测…

Golang | Leetcode Golang题解之第498题对角线遍历

题目&#xff1a; 题解&#xff1a; func findDiagonalOrder(mat [][]int) []int {m, n : len(mat), len(mat[0])ans : make([]int, 0, m*n)for i : 0; i < mn-1; i {if i%2 1 {x : max(i-n1, 0)y : min(i, n-1)for x < m && y > 0 {ans append(ans, mat[x…

uni-app微信小程序如何使用高德地图。通过经纬度获取所在城市

高德地图官方是这样介绍的使用方法可以参考&#xff1a;入门指南-微信小程序插件 | 高德地图API 我再介绍一下我得具体应用。 1&#xff0c;首先要在申请高德地图开放平台得账号。然后在这个账号中申请一个应用。类型选择微信小程序。 我的应用 | 高德控制台 获取Key-创建工…

怎样把学生的成绩单独告知家长?

期中考试季的到来让校园里的气氛似乎也变得紧张起来。家长们开始频繁地联系老师&#xff0c;希望了解孩子的表现&#xff1b;孩子们则在考试后&#xff0c;绞尽脑汁地想出各种理由&#xff0c;以期在成绩不理想时能减轻家长的失望。老师们更是忙得不可开交&#xff0c;不仅要批…

C++(标准输入输出流、命名空间、string字符串、引用)

C特点及优势 &#xff08;1&#xff09;实现了面向对象&#xff0c;在高级语言中&#xff0c;处理运行速度是最快&#xff1b; &#xff08;2&#xff09;非常灵活&#xff0c;功能非常强大&#xff0c;相对于C的指针优势&#xff0c;C的优势为性能和类层次结构&#x…

【天气识别系统】Python+卷积神经网络算法+人工智能+深度学习+TensorFlow+算法模型训练+Django网页界面

一、介绍 天气识别系统&#xff0c;以Python作为主要编程语言&#xff0c;通过收集了4种常见的天气图像数据集&#xff08;多云、雨天、晴天、日出&#xff09;&#xff0c;然后基于TensorFlow搭建卷积神经网络算法模型&#xff0c;通过多轮迭代训练&#xff0c;最后得到一个识…

Go 语言基础教程:6.条件判断

在这篇教程中&#xff0c;我们将通过一个简单的 Go 语言程序来学习条件判断结构的使用。以下是我们要分析的代码&#xff1a; package mainimport "fmt"func main() {if 7%2 0 {fmt.Println("7 is even")} else {fmt.Println("7 is odd")}if 8…

社交媒体与客户服务:新时代的沟通桥梁

在数字化时代&#xff0c;社交媒体已成为人们日常生活中不可或缺的一部分&#xff0c;它不仅改变了人们的沟通方式&#xff0c;也深刻影响着企业的客户服务模式。从传统的电话、邮件到如今的社交媒体平台&#xff0c;客户服务的渠道正在经历一场前所未有的变革。社交媒体以其即…

聚类分析算法——K-means聚类 详解

K-means 聚类是一种常用的基于距离的聚类算法&#xff0c;旨在将数据集划分为 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面&#xff0c;我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。…

Easy Excel合并单元格情况简单导入导出

需求 实现报表数据的导入导出&#xff0c;表格中部分数据是系统生成&#xff0c;部分数据是甲方填写&#xff0c;录入系统。 批号唯一 Maven <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.…

《IDE 巧用法宝:使用技巧全解析与优质插件推荐》

在日常撸代码的时候&#xff0c;相信兄弟们在IDEA 中用到不少插件&#xff0c;利用插件&#xff0c;不仅可以提高工具效率&#xff0c;撸起代码来&#xff0c;也格外的娃哈哈…… 一、IntelliJ IDEA 作为一个资深 Java 程序员&#xff0c;除了 IDEA 中默认的插件&#xff0c;我…