在 ubuntu 20.04 系统上,安装 OpenCV 4 的 C++ 开发环境。
OpenCV 有很多的依赖项,有一些必须的,还有很多可选的。
必须的:
gcc
, cmake
, build-essential
, libtbb
(英特尔线程构建模块), GTK+2.x
或更高版本,这些 Ubuntu 系统通常都会自带安装。
sudo apt install build-essential cmake libtbb2 libttb-dev libgtk-3-dev
可选的:
可选的依赖项有很多,如图片编码库、视频编码库等。这些依赖项是针对某些特定的功能,即使没有安装也不会影响OpenCV 4 的编译与使用。建议将常用的依赖都安装上,防止以后需要用到某些特定的功能。
sudo apt install python3 python3-dev pkg-config
sudo apt install libjpeg-dev libpng-dev libtiff-dev libjasper-dev
sudo apt install zlib1g zlibe1g-dev libavcodec-dev libavformat-dev libswscale-dev
sudo apt install libv4l-dev libxvidcore-dev libx264-dev libatlas-base-dev libdc1394-22-dev
sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt install gfortran openexr libopenexr-dev
从 OpenCV 的 github 上下载最新的源码(source code),
解压后可以得到 OpenCV 4.5.3 的源码。
(1)进入源码目录,创建并进入 build
文件夹
cd opencv-4.5.3
mkdir build
cd build
(2)运行 cmake
命令,进行编译检查
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
关于编译选项的说明:
-D OPENCV_GENERATE_PKGCONFIG=ON
,OpenCV4 默认不生成.pc
文件,该选项开启生成 opencv4.pc
文件,从而支持pkg-config
功能。-D CMAKE_INSTALL_PREFIX=/usr/local
,指定安装路径,设置该选项后,各部分分别安装在/usr/local/
目录的include/
,bin/
,lib/
3个文件夹下。在执行 cmake
命令的过程中,会自动下载IPPICV
,通常会报错如下,
-- IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz
-- Try 1 failed
--
=======================================================================
Couldn't connect to server from the Internet.
Perhaps direct connections are not allowed in the current network.
To use proxy please check/specify these environment variables:
- http_proxy/https_proxy
- and/or HTTP_PROXY/HTTPS_PROXY
=======================================================================
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
IPPICV: Download failed: 7;"Couldn't connect to server"
For details please refer to the download log file:
~/opencv-4.5.3/build/CMakeDownloadLog.txt
这是由于无法正常访问 https://raw.githubusercontent.com 网站,可以通过修改 hosts 文件的方式来解决:
(1)使用sudo vi /etc/hosts
,打开hosts
文件,
(2)在文件末尾添加185.199.109.133 raw.githubusercontent.com
,
(3)sudo systemctl restart NeworkManager.service
重启网络服务,使上述修改生效。
(4)ping raw.githubusercontent.com
,如果能 ping 通,且延时不大,则说明能正常访问。
重新执行cmake
命令,发现IPPICV
部分能正常下载。
-- IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz
-- found Intel IPP (ICV version): 2020.0.0 [2020.0.0 Gold]
-- at: ~/opencv-4.5.3/build/3rdparty/ippicv/ippicv_lnx/icv
-- found Intel IPP Integration Wrappers sources: 2020.0.0
-- at: ~/opencv-4.5.3/build/3rdparty/ippicv/ippicv_lnx/iw
(3)编译并安装
sudo make -j8
sudo make install
-j8
选项是指使用 8 个线程进行编译,这个可以根据自己的电脑性能进行设置,默认为单线程。使用 8 个线程进行编译时,大概 10 分钟能完成编译过程。
(4)C++ 环境配置
先在/etc/ld.so.conf.d/
文件夹下新建一个opencv4.conf
文件,然后写入/usr/local/lib
cd /etc/ld.so.conf.d/
sudo touch opencv4.conf
sudo sh -c 'echo "/usr/local/lib" > opencv4.conf
然后,更新pkg-config
。
sudo ldconfig
编辑 bashrc
文件,添加下面两条语句。
sudo gedit /etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
最后,更新环境。
source /etc/bash.bashrc
sudo updatedb
此时,使用下面的两条命令,应该能够查看到相应的路径。
> pkg-config --libs opencv4
-I/usr/local/include/opencv4
> pkg-config --cflags opencv4
-L/usr/local/lib -lopencv_gapi -lopencv_highgui -lopencv_ml
-lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video
-lopencv_calib3d -lopencv_features2d -lopencv_dnn -lopencv_flann
-lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
使用下面的命令可以查看opencv
的版本。
> opencv_version
4.5.3
编写一个简单的图像显示程序,来测试安装的 OpenCV 4 开发环境。
源码display_image.cpp
文件,
#include
int main(int argc, char** argv)
{
cv::Mat img = cv::imread(argv[1], -1);
if(img.empty())
return -1;
cv::namedWindow("display image", cv::WINDOW_AUTOSIZE);
cv::imshow("display image", img);
cv::waitKey(0);
cv::destroyWindow("display image");
return 0;
}
使用以下命令进行编译,
g++ display_image.cpp -o display_image.out `pkg-config opencv4 --cflags --libs`
注意:命令中的单引号必须是
``
(键盘左上角数字键 1 左边的按键),而不是常用的''
,否则会显示找不到文件。
编写 CMakeLists.txt
文件,
cmake_minimum_required(VERSION 2.6)
# 创建工程
project(display_image)
# C++版本为11
set(CMAKE_CXX_FLAGS "-std=c++11")
# 寻找 OpenCV 4 安装路径
find_package(OpenCV 4.3.5 REQUIRED)
# 加载OpenCV 4 的头文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加可执行文件
add_executable(display_image display_image.cpp)
# 链接 lib 文件到可执行文件中
target_link_libraries(display_image ${OpenCV_LIBS})
然后,进行编译,
mkdir build
cmake ..
make
编译后,使用以下命令运行程序,可以打开对应的图像,
../dispaly_image.out path_to_picture
opencv 自带了许多示例程序,在
opencv-4.5.3/samples/cpp
和opencv-4.5.3/samples/cmake
目录中,可以编译后运行。
如果需要卸载 OpenCV,可以使用下面的方法。
(1)删除opencv4.conf
文件
cd /etc/ld.so.conf.d/
sudo rm opencv4.conf
(2)卸载
进入编译 opencv 的 build
文件夹
cd opencv-4.5.3/build
sudo make uninstall