开发环境
首先,需要安装一系列必要的工具,包括:
$ sudo apt-get update # 这是为了更新你的软件源
$ sudo apt-get install build-essential # 这是为了安装编译所需的库
$ sudo apt-get install cmake pkg-config git # 这是为了安装一些必要的工具
$ sudo apt-get install libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libtiff4.dev libswscale-dev libjasper-dev libdc1394-22-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
然后,可以去网上下载OpenCV的源码,我是采取git仓库克隆的方式,直接获取最新的版本,如下:
$ git clone https://github.com/opencv/opencv
1、建立编译目录
源码下载完成后,进入该目录下,执行以下语句:
$ cd opencv
$ mkdir build
$ cd build
这是为了在源码的根目录下建立一个临时目录,用于存放编译所产生的文件,不至于污染源码,使得你的源码可以根据不同的配置命令分别编译出多份可执行文件,每一份都很清晰,不至于混在一起。
这个思路,有一个很官方的名字叫OUT SOURCE BUILD,意思就是在代码之外的地方进行编译。而与其相对的,就是IN-SOURCE BUILD,意味在代码内进行编译。
所以,如果没有按照上面的步骤新建一个目录然后到目录里面去编译的话,系统就会给出一个提示说:In-source builds are not allowed.
。
2、编译安装源码
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make
$ sudo make install
注意:在第一步中,配置了两个参数,第一个参数是指定程序为发布版本,第二个参数是指定安装目录,也可以根据自己的需要自定义修改(不过强烈建议大家不要改,就按这个/usr/local
目录,不然后面可能会遇到一些麻烦)。
1、添加库路径
打开文件进行编辑:
$ sudo vi /etc/ld.so.conf.d/opencv.conf
输入下面的内容,然后保存并退出
/usr/local/lib
2、添加环境变量
打开文件进行编辑:
$ sudo vi /etc/profile
在末尾加入:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
3、更新环境变量
$ sudo source /etc/profile
4、重启,然后输入命令
$ pkg-config --modversion opencv # 查看linux下的opencv安装版本
4.6.0
如果没有出错,说明安装成功。
注意:如果报了如下错误 Package opencv was not found in the pkg-config search path
:
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
那就是缺失了opencv.pc这个配置信息文件,故解决方法就是添加这个文件然后将其导入到环境变量中,具体操作如下:
1、首先创建opencv.pc文件(需要注意它的路径信息)
$ cd /usr/local/lib
$ sudo mkdir pkgconfig
$ cd pkgconfig
$ sudo touch opencv.pc
2、然后在opencv.pc中添加以下信息(注意这些信息需要与自己安装opencv时的库路径对应)
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: opencv
Description: The opencv library
Version:4.6.0
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
~
3、保存退出,然后将文件导入到环境变量
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
至此就配置好opencv.pc,再执行 pkg-config --modversion opencv
命令试试。
完成了上述的所有步骤,就已经差不多了,接下来就开始进行验证测试。
进入opencv的源码目录,里面有一个sample/cpp/example_cmake
的子目录,里面有一个很简单的例程,我们就用这个例程来进行演示:
$ cd opencv/samples/cpp/example_cmake/
$ cmake . # 请注意,这里的cmake后有一个空格,然后是一个点号
$ make
编译成功了,运行一下试试:
$ ./opencv_example
Built with OpenCV 4.6.0-dev
(opencv_example:13315): GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed
VIDEOIO ERROR: V4L: can't open camera by index 0
No capture
这是因为用的是虚拟机,没有摄像头,因此显示了黑屏。如果使用的是物理机,也有摄像头,那么就会显示出摄像头的画面并叠加上hello opencv的提示语句。
到此,所有工作全部顺利完成!恭喜!
如果刚才配置编译和安装目录的时候,没有设置为缺省的/usr/local
目录, 而是设置了其他的目录(比如/usr/local/opencv-4.6.0
这个目录),则有可能会在后面在应用的过程中遇到一个问题,就是使用cmake命令编译某个工程项目时,提示说:
CMake Error at CMakeLists.txt:39 (find_package):
By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OpenCV", but
CMake did not find one.
Could not find a package configuration file provided by "OpenCV" with any
of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
provides a separate development package or SDK, be sure it has been
installed.
原因就是因为安装opencv时没有使用的默认的路径,导致cmake找不到opencv。
解决方法也很简单,执行cmake命令前,先输入下面的语句:
$ export OpenCV_DIR=/usr/local/opencv-4.6.0 # 这里的/usr/local/opencv-4.0.0目录就是你安装的实际目录
然后再执行cmake命令,按照之前的步骤一步步往下。