🎉 Install and Compile OpenCV
安装
⾸先先安装⼀切有必要的包裹:
sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential cmake unzip pkg-config sudo apt-get install libjpeg-dev libpng-dev libtiff-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install libv4l-dev libxvidcore- dev libx264-dev sudo apt-get install libgtk-3-dev sudo apt-get install libatlas-base-dev gfortran sudo apt-get install python3-dev
下载OpenCV源代码 接下来我们下载OpenCV的源代码。这是因为如果要配置CUDA⽀持,OpenCV并没有提供现成直接安装的包裹(C++版也是如此,不像Python的能直接pip install),我们必须先下载源代码,然后cmake编译后安装。
进⼊OpenCV Github Release⽹⻚: https://github.com/opencv/opencv/releases
选择你想要的版本,我选择了最新的4.4.0.
c. 接下来轮到OpenCV-contrib:
https://github.com/opencv/opencv_contrib/releases
选择⼀样版本的contrib(不⼀样版本后果⾃负哈)
解压
在home下打开终端。加上从上⾯拿到的两个链接,通过以下命令,我们能下载OpenCV的源代码并解压:
cd ~ wget -O opencv.zip https://github.com/opencv/opencv/archive/[你的版本号].zip wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/[你的版本号].zip unzip opencv.zip unzip opencv_contrib.zip mv opencv-[你的版本号] opencv mv opencv_contrib-[你的版本号] opencv_contrib
选择编译
使⽤cmake-gui,选择unix makefiles, 然后根据视频把不需要的项⽬取消掉,主要有:opencv_face, opencv_world,所有test,opencv_xfeature2d,opencv_stitching。记得把OPENCV_GENERATE_PKGCONFIG 这个勾选上,要不然没法查看Opencv版本,还得⾃⼰创建。
编译
编译make -jx,x是CPU核数,随便写⼀个也可以。例如:8
安装
编译成功后我们就可安装: sudo make install sudo ldconfig
验证
注意加 4
· PKG_CONFIG作用
一般我们写的程序都是要依赖一些库,但库的安装位置可能不同,这就需要一个工具能够管理并能搜索这些库的路径(头文件路径
/include
,库文件路径/lib
)。pkg-config
就是通过库提供的一个.pc
文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。通过pkg-config
提供的参数–cflags, –libs
,将所需信息提取出来供编译和连接使用。这样,不管库文件安装在哪,通过库对应的.pc
文件就可以准确定位。它提供的主要功能有:
检查库的版本号。如果所需库的版本不满足要求,打印出错误信息,避免连接错误版本的库文件;
获得编译预处理参数,如宏定义,头文件的路径;
获得编译参数,如库及其依赖的其他库的位置,文件名及其他一些连接参数;
加入所依赖的其他库的设置
· PKG_CONFIG_PATH
pkg-config
默认会搜索/usr/lib/pkgconfig
和/usr/share/pkgconfig
下的.pc
配置文件,若我们源码编译的库的路径不在pkg-config
的默认搜索路径下,则可以通过环境变量PKG_CONFIG_PATH
将自定义的路径添加到pkg-config
的搜索路径。最终配置图
测试
创建新⽂件夹,我命名为OpenCV-Test
进⼊⽂件夹后右键打开终端
touch main.cpp 创建名为main.cpp的⽂件
右键main.cpp,使⽤IDE打开
复制代码:
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { //读取照⽚ Mat image = imread("OpenCV_Logo.png"); //检测失误 if (image.empty()) { cout << "Could not open or find the image"<< endl; cin.get(); //等待键盘输⼊ return -1; } String windowName = "OpenCV Test"; 窗⼝名称 namedWindow(windowName); 创建新窗⼝ imshow(windowName, image); 使⽤新窗⼝显⽰照⽚ waitKey(0); 等待键盘输⼊ destroyWindow(windowName); 关闭所有窗⼝ return 0; }