qt环境+opencv+ffmpeg配置(使用)安装步骤+扩展

环境

  • Windows
  • Qt5
  • Cmake
  • Opencv
  • ffmpeg

下载

qt5下载,参考如下链接的说明:QT5下载
Opencv下载:Opencv
Cmake下载:CMake
ffmpeg下载:ffmpeg / 官网
官网可以下载更多release 版本。
下载Cmake,二进制执行文件即可。
在这里插入图片描述
下载Opencv
在这里插入图片描述
windows opencv
下载ffmpeg,这里选择windows builds from gyan.dev
ffmpeg

选择 release builds.在这里插入图片描述
点击下载需要的版本,比如ffmpeg-release-full shared。
下载ffmpeg

安装opencv

配置环境变量

  • 运行Cmake执行程序进行安装,根据自己情况选择适合安装的位置。
  • 解压Opencv,存放在适当位置即可。
    在这里插入图片描述
    完成环境变量配置后,重启电脑使其生效。

编译opencv

  • Configure 配置
    在这里插入图片描述
    完成上图后,点击configure.
    选择MinGW Makefile和“Specify native compilers”->next.
    选择编译工具如下:
    [C] D:\xxx\Qt\Qt5.12.9\Tools\mingw730_64\bin\gcc.exe
    [C++] D:\xxx\Qt\Qt5.12.9\Tools\mingw730_64\bin\g++.exe
    点击finish,会自动构建。
    • 选择特定flag
      构建完成后,在界面红勾选“WITH_1394”, “WITH_OPENGL”, “WITH_QT”, “WITH_OPENMP” ,点击configure,完成后,标红的部分基本已经消失。
  • generate 生成makefile
    点击generate。
  • 打开Power shell
    进入E:\lib\opencv\opencv-build路径下,运行mingw32-make -j 4 (-j 线程数查看自己处理器的线程数,提高编译速度),不出错的话,完成运行后,运行mingw32-make install完成安装。
    在这里插入图片描述
    进入install找到如下图所示路径添加到环境变量,重启电脑。
    在这里插入图片描述

ffmpeg 配置

参考:VS2019配置ffmpeg4.4 非常详细
下面是一些摘要:

windows下,配置环境变量:
在这里插入图片描述
将上面路径配置到环境变量,重启电脑后生效。
cmd,输入ffmpeg -version 如下所示:
ffmpeg -version
Qt 导入ffmepg
这里选择动态库,将解压后的ffmpeg 目录下include和bin目录放置在自己的工程目录。
.pro 文件导入:

INCLUDEPATH += $$PWD/ffmpeg5.0.1/include
LIBS += $$PWD/ffmpeg5.0.1/bin/av*.dll \
    $$PWD/ffmpeg5.0.1/bin/sw*.dll \
    $$PWD/ffmpeg5.0.1/bin/pos*.dll

测试程序

  • 新建Qt项目kit配置
    如果Qt本地安装了多个编译器,则需要选择MinGW 64-bit编译器。

采用opencv打开一张图片

  • 需要将opencv头文件以及库文件路径添加到.pro配置中。
    在这里插入图片描述

  • main.cpp

#include <QDebug>
#include <QFile>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#define EN 1

using namespace cv;
int main(int argc, char *argv[])
{
#if EN
    QFile file(":/local_temp/2.png");
    if(!file.open(QFile::ReadOnly))
    {
        qDebug() << "read file failed!"<<endl;
        return 0;
    }
    QByteArray byteData = file.readAll();
    Mat mImage =imdecode(vector<char> (byteData.begin(), byteData.end()), 1);
#elif
    Mat mImage = imread(":/local_temp/2.png");//opencv无法直接使用":/xxx/xx.png"资源文件 \ 
    路径读取图片,可以采用imdecode方法,当然如果采用绝对路径可以使用imread
#endif
    namedWindow("pitest", CV_WINDOW_AUTOSIZE);
    imshow("pitest", mImage);
    cv::waitKey(0);//任意键结束
    file.close();
    return 0;
}
  • 坑1
    OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow
    使用imread()时,路径需要使用绝对路径 或者 采用上面的资源文件的方式

Qtcreator 新增组建

在如下目录打开MaintenanceTool.exe
D:\xxx\Qt\Qt5.12.9
在这里插入图片描述

打包与运行

windows (单个exe)

可以将exe和所需要的库文件打包到一个exe文件中,使用enigmavb.exe。

windows xxx(安装包)

  • 采用windeployqt.exe 为exe文件找到相应库,运行exe出现以下问题:
    Q1: 无法定位程序输入点_ZdaPvj于动态链接库
    Q2: 程序无法正常启动0xc000007b
    Q3: 其他与exe相关的错误等。
    A: 采用Qt自带的cmd窗口用windeployqt.exe 为exe找相应库
    64bit exe
    在这里插入图片描述
    问题解决。

linux xxxx

  1. 编译出可执行文件
  2. 找到lib文件
  3. 打包运行
    参考https://blog.csdn.net/xx970829/article/details/115023991
  • 找lib 文件

1.在桌面新建一个文件夹 floder,还有两个sh文件(copylib.sh、outext.sh)

//copylib.sh
#!/bin/bash
LibDir=$PWD"/lib"
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)
for Variable in ${lib_array[@]}
do
    cp "$Variable" $LibDir
done
//outext.sh
#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"
  1. 去Qt 安装目录下找platforms文件夹,将该文件夹拷贝到floder下;
  2. 找可执行程序所涉及的lib,将copylib.sh放到“执行程序”所在路径,然后授权,执行
chmod 777 copylib.sh
./copylib.sh  out.a //out.a改成自己的可执行文件名

将执行完毕后产生的lib下的所有文件拷贝到floder下;
4. 将copylib.sh放到platforms下

chmod 777 copylib.sh
./copylib.sh  libqxcb.so

同样,将执行完毕后产生的lib下的所有文件拷贝到floder下;
5. 以上步骤已经将所有涉及到的lib备齐,将floder放在其他ubuntu下,执行outexe.sh

chmod  -R 777 outexe.sh 
./outexe.sh
  • 打包成可执行文件,用户双击就可以运行
    新建快捷访问,如run.desktop
[Desktop Entry]
Encoding=UTF-8
Name=clientRo                              //快捷方式的名字
Comment=testPrograme
Exec=/home/test/Desktop/floder/outexe.sh   //.sh 运行脚本文件
Icon=/home/test/Desktop/01.png             //快捷方式的图标
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;

经过如上步骤或许运行不起来,如下设置即可。
6. 允许程序作为可执行程序:右键快捷方式,属性->权限,勾选“allow executing file as program”
7. 勾选“可执行文件作为文本文件时执行他们”
在这里插入图片描述
在这里插入图片描述

问题总结
  • error while loading shared libraries
/*
问题原因:系统找不到xxx.so 存放在那个目录,需要将.so所在目录加入到/etc/ld.so.conf中
1.打开/etc/ld.so.conf最后一行加入.so目录
2.运行/sbin/ldconfig -v 配置即可
*/

shell

  • 启动某个路径下的程序
    采用/bin/bash ,否则${DIRNAME:0:1}无法解析
#!/bin/bash

DIRNAME=$0
if [ "${DIRNAME:0:1}" = "/" ];then
   CURDIR=`dirname $DIRNAME`
else
    CURDIR="`pwd`"/"`dirname $DIRNAME`"
fi
echo $CURDIR

#kill all history records about serverApp process
ps -ef |grep spp | grep -v grep | awk '{print $2}' | xargs kill -9

$CURDIR/serverApp &
$CURDIR/application
#kill all history records about serverApp process
ps -ef |grep spp | grep -v grep | awk '{print $2}' | xargs kill -9
/*
$0: shell 脚本自身的名字
dirname $0 : 脚本自身所在的相对路径
ps -ef | grep spp : 查找所有spp进程
grep -v grep : 过滤掉包含grep的进程
提取找到记录中第二列的参数,所有进程号
xargs kill -9: 将前面的参数都传递给kill -9

*/

ffmpeg 用法

常用命令

//查看设备所支持的格式
ffmpeg -devices
//播放音频文件test.pcm
ffplay -ar 44100 -ac 2 -f s16le test.pcm

cmd 播放pcm音频文件

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值