1.
下载opencv源码,我采用的是opencv-4.7.0。OpenCV官方源码链接如下
Releases - OpenCV,点击Source即可下载。
2.
下载必要的软件包依赖
sudo apt-get install build-essential
sudo apt-get install cmake-gui git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev
在第三行代码中,网上一般是python-dev,python-numpy,但这两个安装包不能下载了,应为python3-dev,python3-numpy。
3.
将下载好的opencv-4.7.0.zip文件解压,产生opencv-4.7.0文件夹,移动到home路径下。进入opencv-4.7.0,创建build文件夹
cd opencv-4.7.0
mkdir build
cd build
4.
编译OpenCV时需要用外网安装一些依赖,这里下载一个代理工具 proxychains
执行以下命令
sudo apt-get install proxychains
5.
在第三步中,已经进入build文件夹,如下图,在终端中执行下述命令。
proxychains cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/home/nano/OpenCV4 ..
make -j16
make install
在这里特别注明一下,网上一般是直接下载到/usr/local路径下,但我觉得不好,下载到了home路径下,在home路径下建立一个OpenCV4文件夹,这个文件夹命名随意,如下图。需要将上述的/home/nano/OpenCV4 .. 改为自己的路径,这里的nano是用户名。执行make-j16 和make install即可编译安装成功。
编译成功后OpenCV4文件夹下会产生4个文件夹
6.
编译成功后,测试。进入/home/nano/opencv-4.7.0/samples/cpp/example_cmake路径下。这里有一个cpp文件和Makefile,CMakeLists.txt文件。
这里需要修改一下CMakeLists.txt文件,直接执行cmake. 命令编译会显示无法找到OpenCV文件。目前尚不清楚具体原因,于是需要设置以下OpenCV_DIR的路径。
在FIND_PACKAGE上方加入 set(OpenCV_DIR /home/nano/OpenCV4/lib/cmake/opencv4/)
如下图(这里的OpenCV_DIR的路径也可以修改为一开始创建的build文件夹的路径,即/home/nano/opencv-4.7.0/build)
保存后,执行下面命令
cmake .
make
./opencv_example
即可打开摄像头,代表opencv安装配置成功
7.
#执行文件存入bin文件夹
SET (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#src文件夹所有源文件,创建SRC_IST变量
AUX_SOURCE_DIRECTORY (. SRC_LIST)
#opencv
SET(OpenCV_DIR /home/nano/OpenCV4/lib/cmake/opencv4)
FIND_PACKAGE (OpenCV REQUIRED)
INCLUDE_DIRECTORIES({OpenCV_INCLUDE_DIRS})
#头文件
INCLUDE_DIRECTORIES(../include)
#生成可执行文件
ADD_EXECUTABLE(demo ${SRC_LIST})
#链接opencv lib库
TARGET_LINK_LIBRARIES(demo ${OpenCV_LIBS})
上图是笔者自己新建工程下的CMakeLists.txt文件,与之前网上大多数版本的区别在于设置了OpenCV_DIR的路径。单纯照搬网上的模板只写FIND_PACKAGE(OpenCV_REQUIRED)会编译出错,这里的OpeCV_DIR的路径是编译下载好的的Opencv中包含OpenCV_CMAKE_Config文件的路径。位于/home/nano/OpenCV4/lib/cmake/opencv4下,也可以更换为之前创建的build文件夹的路径。在网上的很多例子中只有FIND_PACKAGE。我原来写的项目中CMakeLIsts.txt文件也是这么写的,程序也可以运行。但是昨天发现程序无法运行了,研究一下发现要指定OpenCV_DIR就可以运行了。