1)备份原来的文件/etc/yum.repos.d
2)到阿里开源镜像站点下载系统对应版本的repo文件:
#CentOS8[root@VM-0-8-centos yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-8.repovim 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-cnnicbaseurl=https://mirrors.cnnic.cn/centos/$releasever/BaseOS/$basearch/os/gpgcheck=1enabled=1gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official [AppStream-cnnic]name=CentOS-$releasever-AppStream-cnnicbaseurl=https://mirrors.cnnic.cn/centos/$releasever/AppStream/$basearch/os/gpgcheck=1enabled=1gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official [extras-cnnic]name=CentOS-$releasever-Extras-cnnicbaseurl=https://mirrors.cnnic.cn/centos/$releasever/extras/$basearch/os/gpgcheck=1enabled=1gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official [centosplus-cnnic]name=CentOS-$releasever-Plus-cnnicbaseurl=https://mirrors.cnnic.cn/centos/$releasever/centosplus/$basearch/os/gpgcheck=1enabled=0gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official [PowerTools-cnnic]name=CentOS-$releasever-PowerTools-cnnicbaseurl=https://mirrors.cnnic.cn/centos/$releasever/PowerTools/$basearch/os/gpgcheck=1enabled=0gpgkey=https://mirrors.cnnic.cn/centos/RPM-GPG-KEY-CentOS-Official4)清除系统yum缓存,并重新生成新的yum缓存
dnf -y install epel-releasednf clean alldnf makecachednf 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-base2)下载OpenCV源码和OpenCV-Contrib源码
新建一个文件夹存放下载的opencv文件:mkdir ~/opencv_build cd ~/opencv_buildgit clone https://github.com/opencv/opencv.gitgit 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超时:
或者可到这里下载:这里
修改文件:
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/pkgconfigexport 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
令配置生效:
ldconfig8)查看是否安装成功(若还不成功的话试一试重启大法)
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
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删