下载opencv3.4.6源码
https://codeload.github.com/opencv/opencv/zip/3.4.6
编译安装opencv3.4.6
可以使用unzip进行解压了(如果使用不了unzip解压,说明文件下载不全,文件有88MB)
unzip opencv-3.4.6.zip
mkdir build && cd build
其中CMAKE_INSTALL_PREFIX=/home/caffe/opencv34/ 表示是opencv3.4.6编译安装的路径,这个需要自己设置。
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/home/caffe/opencv34/ ..
编译的过程可能会出现
可能需要在根目录下部分依赖安装(root权限)
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
因为网络原因无法下载完全ippicv_2019_lnx_intel64_general_20180723.tgz,需要将这个文件下载到本地,下载地址https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20180723/ippicv。将ippicv_2019_lnx_intel64_general_20180723.tgz放在了caffe用户目录下的download文件夹下。
将ippicv的http下载注释掉,然后指定一下ippcv的本地文件
vim ~/opencv-3.4.6/3rdparty/ippicv/ippicv.cmake
具体需要根据自己的路径进行修改
"file:///home/caffe/download/"
按照如图进行修改
然后继续编译设置
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/home/caffe/opencv34/ ..
编译安装
make all -j12
make install
需要配置一下opencv环境,
注意opencv安装在了/home/caffe/opencv34/文件夹里面了
vim ~/.bashrc
export PKG_CONFIG_PATH=/home/caffe/opencv34/lib/pkgconfig
export LD_LIBRARY_PATH=/home/caffe/opencv34/lib
source ~/.bashrc
也可以简单测试一下,显示出opencv version基本上就是没有什么问题了
pkg-config opencv --modversion
测试
这个测试是用opencv3.4.6自带的的例子
cd /home/caffe/opencv-3.4.6/samples/cpp/example_cmake
cmake .
make
./opencv_example
发现使用的是根目录下的opencv4.2.0,默认是使用的是根目录下的opencv,需要将cmake中的路径修改一下
还是在上面的目录下(example_cmake),打开CMakeList.txt文件
vim CMakeLists.txt
将其放在find_package(OpenCV REQUIRED)上面,添加一行设置opencv路径,上面由CMAKE_INSTALL_PREFIX=/home/caffe/opencv34/可以知道opencv编译安装的位置上
set(OpenCV_DIR "/home/caffe/opencv34/share/OpenCV")
清除上面的make,继续执行
cd /home/caffe/opencv-3.4.6/samples/cpp/example_cmake
make clean
make
./opencv_example
显示,只是打不开摄像头,那就说明没有问题
小知识点
CMakeLists中的find_package(OpenCV REQUIRED)会在Ubuntu系统中找到opencv的设置文件OpenCVConfig.cmake,该文件定义了OpenCV_INCLUDE_DIRS和OpenCV_LIBS 等变量,因而可以使用 include_directories和target_link_libraries来访问这两个变量。
locate OpenCVConfig.cmake
看到如图,发现很多opencv路径,找到需要的opencv路径就可以了:
文件OpenCVConfig.cmake,
文件头部有注释如下:
# In your CMakeLists.txt, add these lines:
#
# find_package(OpenCV REQUIRED)
# include_directories(${OpenCV_INCLUDE_DIRS}) # Not needed for CMake >= 2.8.11
# target_link_libraries(MY_TARGET_NAME ${OpenCV_LIBS})
#
# Or you can search for specific OpenCV modules:
#
# find_package(OpenCV REQUIRED core videoio)
#
# You can also mark OpenCV components as optional:
# find_package(OpenCV REQUIRED core OPTIONAL_COMPONENTS viz)
#
# If the module is found then OPENCV_<MODULE>_FOUND is set to TRUE.
#
# This file will define the following variables:
# - OpenCV_LIBS : The list of all imported targets for OpenCV modules.
# - OpenCV_INCLUDE_DIRS : The OpenCV include directories.
# - OpenCV_COMPUTE_CAPABILITIES : The version of compute capability.
# - OpenCV_ANDROID_NATIVE_API_LEVEL : Minimum required level of Android API.
# - OpenCV_VERSION : The version of this OpenCV build: "3.4.6"
# - OpenCV_VERSION_MAJOR : Major version part of OpenCV_VERSION: "3"
# - OpenCV_VERSION_MINOR : Minor version part of OpenCV_VERSION: "4"
# - OpenCV_VERSION_PATCH : Patch version part of OpenCV_VERSION: "6"
# - OpenCV_VERSION_STATUS : Development status of this build: ""
#
# Advanced variables:
# - OpenCV_SHARED : Use OpenCV as shared library
# - OpenCV_INSTALL_PATH : OpenCV location
# - OpenCV_LIB_COMPONENTS : Present OpenCV modules list
# - OpenCV_USE_MANGLED_PATHS : Mangled OpenCV path flag
#
# Deprecated variables:
# - OpenCV_VERSION_TWEAK : Always "0"