centos 8安装opencv+ffmpeg(能使用解码器解码视频)

安装步骤:

1、更新软件仓库,使用国内源:在CentOS中配置使用阿里的开源镜像

1)备份原来的文件/etc/yum.repos.d

2)到阿里开源镜像站点下载系统对应版本的repo文件:

#CentOS8
[root@VM-0-8-centos yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-8.repo

vim Centos-8.repo将里面的所有enabled=0改为enabled=1,即使用里面的所有软件仓库。

3)配置清华源(可以加上多几个源,如清华源、网易源等):

$ vi /etc/yum.repos.d/CentOS-cnnic.repo

#清华源如下配置,这里centosplus-cnnic和PowerTools-cnnic中的enabled根据需求打开;
[BaseOS-cnnic]
name=CentOS-$releasever-Base-cnnic
baseurl=https://mirrors.cnnic.cn/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official

[AppStream-cnnic]
name=CentOS-$releasever-AppStream-cnnic
baseurl=https://mirrors.cnnic.cn/centos/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official

[extras-cnnic]
name=CentOS-$releasever-Extras-cnnic
baseurl=https://mirrors.cnnic.cn/centos/$releasever/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official

[centosplus-cnnic]
name=CentOS-$releasever-Plus-cnnic
baseurl=https://mirrors.cnnic.cn/centos/$releasever/centosplus/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official

[PowerTools-cnnic]
name=CentOS-$releasever-PowerTools-cnnic
baseurl=https://mirrors.cnnic.cn/centos/$releasever/PowerTools/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official

4)清除系统yum缓存,并重新生成新的yum缓存

dnf -y install epel-release
dnf clean all
dnf makecache
dnf repolist

如果只加了阿里源,执行dnf repolist出现结果如下:

2、安装ffmpeg

参考:linux下成功安装调用ffmpeg记录_蠢萌-CSDN博客_ffmpeg linux 

3、编译安装opencv

1)安装必需和可依赖项

sudo dnf install epel-release git gcc gcc-c++ cmake3 qt5-qtbase-devel     python3 python3-devel python3-pip cmake python3-devel python3-numpy     gtk2-devel libpng-devel jasper-devel openexr-devel libwebp-devel     libjpeg-turbo-devel libtiff-devel tbb-devel libv4l-devel     eigen3-devel freeglut-devel mesa-libGL mesa-libGL-devel     boost boost-thread boost-devel gstreamer1-plugins-base

2)下载OpenCV源码和OpenCV-Contrib源码

新建一个文件夹存放下载的opencv文件:mkdir ~/opencv_build 
cd ~/opencv_build
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

我这里安装的是opencv 4.1.0及opencv_contrib 4.1.0,提供一个快速下载:点这里

3)开始编译

创建一个临时构建目录build:mkdir build

进入build目录:cd ./build并执行

cmake3 -D CMAKE_BUILD_TYPE=RELEASE     -D CMAKE_INSTALL_PREFIX=/usr/local     -D INSTALL_C_EXAMPLES=ON     -D INSTALL_PYTHON_EXAMPLES=ON     -D OPENCV_GENERATE_PKGCONFIG=ON     -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules     -D BUILD_EXAMPLES=ON -D WITH_FFMPEG=ON ..

特别注意的是,在这个过程中会出现一些错误,严格的说并不算是错误,只是在配置的过程中会联网下载一些依赖库,但由于opencv版本的问题,这些依赖库的地址可能发生了改变,而旧的opencv编译配置代码中还是用的旧地址,这就会导致下载依赖库不成功,导致有些功能不能被安装,但这些问题并不会在配置完的最后行显示出来,而是在配置(指的是运行上述的cmake3.....)时显示输出:如,

下载ippicv超时:

这是网络无法下载的原因,可以采用如下方法解决:

<1>.进入源码目录 opencv-3.4.8/3rdparty/ippicv

<2>.手动修改ippicv.cmake文件,删掉下载链接,指向ippicv_2019_lnx_intel64_general_20180723.tgz所在目录,该文件下载地址 由于网络下载很慢,可以从这里下载链接:点这里

将上图链接换成如下,注意不要加文件名xxxxx.tgz,只需指定目录

"file:///root/kkk/"

重新执行上面的指令:camke3 -D..................

下载xxx.i超时:

可以查看 build 文件夹下的日志文件 CMakeDownloadLog.txt,在日志文件CMakeDownloadLog.txt中就有说明失败的对应xxx.i的下载地址,复制地址到浏览器打开,再复制里面的内容到新建文件,保存并命名为同名文件,放在 opencv_contrib/modules/xfeatures2d/src/ 路径下即可。

总共缺了以下几个文件,都需要拷贝:

boostdesc_bgm.i

boostdesc_bgm_bi.i

boostdesc_bgm_hd.i

boostdesc_lbgm.i

boostdesc_binboost_064.i

boostdesc_binboost_128.i

boostdesc_binboost_256.i

vgg_generated_120.i

vgg_generated_64.i

vgg_generated_80.i

vgg_generated_48.i

文件可到这里下载:点这里

下载face_landmark_model.dat超时:

手动下载地址:https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat

或者可到这里下载:这里

修改文件:

vim /root/opencv_build/opencv_contrib-4.1.0/modules/face/CMakeLists.txt

 我下载好的face_landmark_model.dat是放在root下的,故上图改的为:"file:///root/"

需要注意的是,文件下载好后需要使用指令校验一下MD5的值:

 如果这个值跟上面的CMakeLists.txt中的对不上的话,就需要将CMakeLists.txt中__file_hash后面的MD5的值改为上图校验出来的新的MD5的值。

下载v0.1.1d.zip超时:

手动下载地址:https://github.com/opencv/ade

或者可到这里下载:这里

为了避免后续出错,请下载master版本的,不要下载release。

修改文件:

vim ./opencv_build/opencv-4.1.0/modules/gapi/cmake/DownloadADE.cmake

 同样,需要对比MD5的校验值。

还需要注意的是:github下载的zip文件里的压缩包内的文件夹的名称为:ade-master,,,需要改为:ade-0.1.1d

再重新压缩命名为:v0.1.1d.zip

否则执行上面的cmake时会出错:

4)执行上面的cmake完后会出现打印内容,着重查看:

 cmake成功的话打印内容最后应该是:

 5)编译并安装opencv

make	#计算机配置高的话可以多个核同时编译:make -j8   注:-j后面的8是处理器的内核数,可以通过键入nproc命令查看

出现编译错误1:

解决办法:

cp /root/opencv_build/opencv-4.1.0/modules/dnn/test/test_common.hpp /root/opencv_build/opencv-4.1.0/build/modules/dnn/

出现编译错误2:

编译到以下位置时机器卡死

 原因:机器内存不够

查看内存:free -h

 其中的 Mem:  这个是物理机的内存,可以看到我的是2G的内存;Swap是交换分区,也就是当物理内存不够时,会使用Swap的内存空间作为虚拟内存使用。

当编译运行时会发现Mem:    的内存基本都被使用完了,而此时也发现该主机并没有分配交换分区,此处可以看到是0,这就导致在物理内存不够时机器直接卡死,因为虚拟内存没有空间给它使用。

解决办法:增加虚拟内存,也就是增加Swap的空间

可参考:CentOS增加虚拟内存_wang5701071的博客-CSDN博客_centos 虚拟内存设置

交换空间扩容后:

此时交换分区变为了4G,接着再重新编译即可顺利完成。 

6)安装opencv库:sudo make install

创建一个符号链接opencv4.pc提交/usr/share/pkgconfig 目录和执行 ldconfig 重建库缓存:

sudo ln -s /usr/local/lib/pkgconfig/opencv4.pc /usr/share/pkgconfig/
sudo ldconfig

当然pkgconfig也可能安装在lib64下,根据自己的改。

7)添加环境变量与加载动态库

sudo vim /etc/profile

在文件末尾另起行加入如下两行:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

同样,这里需要查看自己当前的pkgconfig是在/usr/local/lib还是/usr/local/lib64,根据自己的改。

令配置生效:

source /etc/profile

接下来进行pkg-config配置,默认的pkg搜索链接路径/usr/lib/pkgconfig,需要将opencv.pc拷贝到pkg的默认路径下:

cp /usr/local/lib/pkgconfig/opencv4.pc /usr/lib/pkgconfig

同样,根据自己的pkgconfig和opencv4.pc的路径改为自己的。

有些人的是:cp /usr/local/lib64/pkgconfig/opencv4.pc /usr/lib/pkgconfig

令配置生效:

ldconfig

8)查看是否安装成功(若还不成功的话试一试重启大法)

pkg-config --modversion opencv4

出现版本号时即表示安装成功。

9)验证opencv是否可以打开视频

新建一个test.cpp

#include <opencv4/opencv2/opencv.hpp>
#include <iostream>
using namespace cv;

int main()
{
    VideoCapture capture;
    Mat frame;
    frame= capture.open("./1.mp4");
    if(!capture.isOpened())
    {
        printf("can not open ...\n");
        return -1;
    }
    //namedWindow("output", CV_WINDOW_AUTOSIZE);

    while (capture.read(frame))
    {
        imshow("output", frame);
        waitKey(10);
    }
    capture.release();
    return 0;
}

编译该cpp文件

g++ test.cpp -I /usr/local/include/opencv4 -L /usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_calib3d -lopencv_features2d -lopencv_videoio -std=gnu++11

编译成功后会生成a.out

执行该文件:./a.out

运行视频成功即表示安装opencv成功。

当然,也可以测试一张图片:

checkOpenCV.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
 
int main() {
    cv::Mat img = cv::imread("./1.png", 1);
    if(!img.data){
         std::cout << " fail to load ./1.png " << std::endl;
         return -1;
    }
    //cv::imshow("img", img);
    cv::imwrite("11.png", img);

    return 0;
}

编译指令:

g++ checkOpenCV.cpp -I /usr/local/include/opencv4 -L /usr/local/lib64 -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_calib3d -lopencv_features2d -lopencv_videoio -std=gnu++11

编译成功后会生成a.out

执行该文件:./a.out

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值