这两天在弄一个实时检测有关的QT项目,欲尝试下yolov4。原本一直用的4.1版本,但并不支持yolov4,只能重装一个4.4.0版本。
本想先在windows环境用QT测试下,结果由于MSVC版本不匹配,得自己编译mingw的opencv包,编译过程遇到了无数的坑,折腾两天后决定还是直接用ubuntu系统。
本文opencv4配置只针对C++。
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev libgtk2.0-dev pkg-config
去Opencv官网下载4.4.0的Sources,下好后解压
去github下载4.4.0的contrib压缩包
将contrib压缩包解压后放进之前解压好的Opencv Sources的文件夹下
在上图所示的文件夹中打开终端
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_ENABLE_NONFREE=YES -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/home/yourname/opencv-4.4.0/opencv_contrib-4.4.0/modules/ ..
make -j4
sudo make install
CMAKE_INSTALL_PREFIX是安装路径,如果没特殊需求建议就用/usr/local
OPENCV_ENABLE_NONFREE=YES是允许使用申请了专利的一些算法,必须加上这句
OPENCV_GENERATE_PKGCONFIG=ON因为opencv4默认不生成.pc文件,所以加上这句
OPENCV_EXTRA_MODULES_PATH是contrib包的路径,改成你自己的
可以在build文件夹下的CMakeDownloadLog.txt中查看,主要看#cmake_download这行,前面是文件名,后面是下载地址,缺什么下什么。
其中有11个文件好像网上大多数人都会缺,如下图我选中的那11个,boostdesc_bgm.i,vgg_generated_48.i那些。成
单独下载完后,将这11个放进/opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/src/文件夹下。
其他如果还有缺的,根据CMakeDownloadLog.txt中的路径将它们下载完再放到指定地方。
make到一半又会出现
fatal error : feature2d/test/test_detectors_regression.impl.hpp:没有那个文件或目录
解决方法:对比一下opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/test/ 和 opencv-4.4.0/modules/feature2d/test/ 文件夹,看看前者缺了哪些.hpp文件,然后把缺的那些都复制进去,应该是缺了以下五个。
test_descriptors_invariance.impl.hpp
test_descriptors_regression.impl.hpp
test_detectors_invariance.impl.hpp
test_detectors_regression.impl.hpp
test_invariance_utils.hpp
然后将opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/test/test_features2d.cpp中的
#include "features2d/test/test_detectors_regression.impl.hpp"
#include "features2d/test/test_descriptors_regression.impl.hpp"
改为
#include "test_detectors_regression.impl.hpp"
#include "test_descriptors_regression.impl.hpp"
再将opencv-4.4.0/opencv_contrib-4.4.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp中的
#include "features2d/test/test_detectors_invariance.impl.hpp"
#include "features2d/test/test_descriptors_invariance.impl.hpp"
改为
#include "test_detectors_invariance.impl.hpp"
#include "test_descriptors_invariance.impl.hpp"
如果还有其他类似错误,则以此类推。
在/etc/ld.so.conf.d/opencv4.conf中(如果没有就自己新建一个)写入/usr/local/lib。
sudo gedit /etc/ld.so.conf.d/opencv4.conf
保存然后更新一下。
sudo ldconfig
sudo gedit /etc/bash.bashrc
# 在末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存然后更新一下
source /etc/bash.bashrc
sudo updatedb
有时会报错error while loading shared libraries: libopencv_core.so.*
这时候就加一步
sudo gedit /etc/ld.so.conf
在末尾加上/usr/local/lib
保存然后更新一下
sudo ldconfig
pkg-config --modversion opencv
看看显示的版本是不是4.4.0。