1 超详细的ubuntu安装opencv_ubuntu安装opencv
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
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
安装成功
老铁如果有收获 就给个赞吧