1 首先确保在Ubuntu上已经安装了cmake和make
1.1 安装make
sudo apt-get install make
1.2 安装cmake
安装cmake可以参考我的博客https://blog.csdn.net/weixin_44698673/article/details/125964197?spm=1001.2014.3001.5502
2 安装依赖环境
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libcanberra-gtk-module
sudo apt-get install pkg-config
3 下载opencv源码
下载地址:https://opencv.org/releases/
点击sources下载源码,我下载的4.5.4的源码。
将下载完成的源码解压到ubuntu中。
4 编译源码并安装
4.1 进入opencv源码目录中,新建build文件夹
4.2 进入build文件夹,打开终端使用cmake生成makefile
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
等待编译完成之后执行make
sudo make
开始编译代码,大概需要1-2个小时
4.3 安装opencv
代码编译完成之后
sudo make install
5 配置环境变量
打开文件 /etc/ld.so.conf,在最后一行加上 /usr/local/lib
注解:/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so库的路径。
默认情况下,编译器只会使用/lib和 /usr/lib 这两个目录下的库文件,而通常通过源码包进行安装时,如果不指定 --prefix会将库安装在 /usr/local 目录下,而又没有在件/etc/ld.so.conf中添加/usr/local/lib这个目录>。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。
对于此种情况有2种解决办法:
1)在用源码安装时,用–prefix指定安装路径为/usr/lib。这样的话也就不用配置PKG_CONFIG_PATH
2) 直接将路径/usr/local/lib路径加入到文件/etc/ld.so.conf文件的中。在文件/etc/ld.so.conf中末尾直接添加:/usr/local/lib
ldconfig
再来看看ldconfig这个程序,位于/sbin下,它的作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新的搜索路径,需要运>行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。
PKG_CONFIG_PATH:
最后说下PKG_CONFIG_PATH这个环境变量,它是在安装了pkg-config后出现的
其实pkg-config就是向configure程序提供系统信息的程序,比如软件的版本啦,库的版本啦,库的路径
PKG_CONFIG_PATH 指明 *.pc 文件(包配置文件,保存了库的头文件,库所在的路径信息比如编译某个工程用到glib-2.0这个库,pkg-config会按照PKG_CONFIG_PATH中的路径行搜索glib-2.0.pc,然后把lib-2.0.pc作为参数传给GCC,那么GCC就可以找到该库了)的路径。
如:PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig
WC 一下偏离主题这么远,回归主题配置环境变量
sudo gedit /etc/ld.so.conf
在文件中加上一行 /usr/local/lib,因为makefile中默认opencv安装在该路径下。
运行ldconfig,使添加的库路径生效
sudo ldconfig
修改bash.bashrc
sudo gedit /etc/bash.bashrc
在文件末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
运行该脚本 生效新设的环境变量
source /etc/bash.bashrc
在命令行中输入如下命令,检测opencv是否安装成功
pkg-config opencv --modversion
表示 opencv安装成功。(这里有一个疑问 我明明下载的4.5.4的源码 为什么这里显示版本为3.2.0,有没有路过的老铁能给解答一下)
如果没有opencv.pc,那么就手动创建它
cd /usr/local/lib/pkgconfig
touch opencv.pc
sudo gedit opencv.pc
文件内容
prefix=/usr/local
exec_prefix=${prefix}
includedir=/usr/local/include
libdir=/usr/local/lib
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.4.0
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}
6 写一个小程序 测试验证
创建一个test.cpp,源码如下
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv )
{
Mat image = imread("123.jpg");
namedWindow("SSJ",WINDOW_FREERATIO);
imshow("SSJ", image);
waitKey(0);
return 0;
}
编译
g++ test.cpp -o test.out $(pkg-config --cflags --libs opencv)
注解:pkg-config 是前文中已经安装的程序,一个包管理工具,可以用于获得某一个库/模块的所有编译相关的信息,pkg-config --cflags --libs opencv 将opencv包的头文件和库信息传递给编译器。不需要再手动去指定头文件和库路径
g++ test.cpp -o test.out -I /usr/include/opencv2 -l /usr/local/lib/opencv
- –libs,查看库信息。
- –cflags,查看头文件信息。
- pkg-config的信息来自 (1) 系统的/usr/lib下的所有 .pc文件。 (2) PKG_CONFIG_PATH环境变量所指向的路径下的所有.pc文件。
运行程序
./test.out
安装成功!!!
老铁如果有收获 就给个赞吧
版权归原作者 小果壳 所有, 如有侵权,请联系我们删除。