1. 在https://github.com/opencv/opencv上下载opencv源码。包括opencv4.5.1和opencv-contrib4.5.1(也可以不用),其中opencv是主体,opencv-contrib包含了一些不是足够稳定的算法,没有集成到opencv中。
2. 把下载的源码包解压可以看到opencv-4.5.1和opencv_contrib-4.5.1两个文件夹,将opencv_contrib-4.5.1目录移到opencv-4.5.1目录下。
在终端安装下列依赖库:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
3. 在opencv-4.5.1目录下,创建文件夹build。然后进入build目录,执行cmake命令
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D ENABLE_CXX11=1 -D OPENCV_EXTRA_MODULES_PATH=../opencv-4.5.1_contrib/modules -D OPENCV_ENABLE_NONFREE=True ..
等待cmake生成相应的工程文件,如果此过程报错,一般是Makefile:160: recipe for target 'all' failed 就用下列cmake命令代替之前的
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_SHARED_LIBS=OFF -D WITH_OPENMP=ON -D ENABLE_PRECOMPILED_HEADERS=OFF ..
4. 使用make来编译。
make -j8
-j8是同时使用8核CPU来执行编译过程,这样速度比较快,具体需要根据自己的电脑情况修改。这个命令应该是编译build下所有的子工程。
5. 编译install工程
sudo make install
这个命令是只编译install这个工程,编译完成就安装成功了。
6. 配置pkg-config路經
经过上面的步骤后,在/usr/local/lib/pkgconfig下生成了opencv4.pc文件,这个文件很重要,里面记录了OpenCV头文件、库文件的路經。需要进行如下配置:
#进入 bash.bashrc
sudo gedit /etc/bash.bashrc
#在文件最后添加如下内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
#在终端更新
sudo updatedb
7. 配置库路經
#打开下列文件
sudo gedit /etc/ld.so.conf.d/opencv.conf
# 添加lib路經
/usr/local/lib
# 更新
sudo ldconfig
查看opencv版本号:
pkg-config --modversion opencv4
实例演示:
写了一个简单的imread函数,编译过不了,他喵的。可以直接用Mat类型,但用imread和imshow都会编译出错。
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
string path = "/home/elvis/Pictures/4.png";
cout<<"paht: "<<path<<endl;
Mat img = imread(path);
Mat m(240, 320, CV_8UC3, Scalar(175, 175, 175));
imshow("win", m);
waitKey(0);
return 0;
}
后来我没用那两个cmake命令,就直接在build文件夹运行cmake ..,也就是说按照默认的CMakeLists.txt文件去cmake,重新安装了opencv,就不报错了,一切顺利。