1. 下载opencv3.4.0源码
下载opencv3.4.0 Linux版本源码,下载地址如下:
https://github.com/opencv/opencv/archive/3.4.0.zip
3.4.0.zip
2. 编译准备
1.配置好交叉编译环境,在Linux下解压opencv源码
unzip 3.4.0.zip
cd opencv-3.4.0
mkdir build
mkdir output
2.安装cmake
OpenCV是通过cmake来构建的编译使用的Makefile。
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件。
sudo apt-get install cmake
进到build目录,按照下面的方式执行cmake:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=../output \
-D CMAKE_C_COMPILER=arm-openwrt-linux-gcc \
-D CMAKE_CXX_COMPILER=arm-openwrt-linux-g++ \
-D BUILD_SHARED_LIBS=ON \
..
说明:
CMAKE_C_COMPILER:指定C编译器
CMAKE_CXX_COMPILER:指定C++编译器
CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项
EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径
LIBRARY_OUTPUT_PATH:库文件路径
CMAKE_BUILD_TYPE:build类型(Debug, Release, …),CMAKE_BUILD_TYPE=Debug
BUILD_SHARED_LIBS:ON动态库,OFF静态库
一定要注意后面的两个点不能省略,这两个点指明了opencv源码的位置。
然后可以看到在build的路径下生成了很多文件和Makefile
注:CMakeCache.txt,该文件是上次cmake时候留下的缓存文件,如果在编译过程中报错,可以将该文件删除,然后再执行cmake。
3. 编译及错误处理
在build目录,执行make,开始编译
编译过程报下面的错误:
根据错误提示信息,在编译libpng时找不到zlib.h头文件,这个版本的OpenCV已经包含了第三方的库3rdparty,修改opencv-3.4.0目录的下的CMakeLists.txt文件,在ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})这一行(484行左右)下面添加:
ocv_include_directories(./3rdparty/zlib/)
进入build目录下,重新执行cmake命令
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=../output \
-D CMAKE_C_COMPILER=arm-openwrt-linux-gcc \
-D CMAKE_CXX_COMPILER=arm-openwrt-linux-g++ \
-D BUILD_SHARED_LIBS=ON \
..
执行make重新编译
等待编译完成后,执行make install,进入到output目录下,可以看到编译出来的opencv库文件和头文件
4. 测试
#include "opencv2/highgui.hpp"
#include "opencv2/core.hpp"
#include "opencv2/imgcodecs.hpp"
using namespace cv;
using namespace std;
int opencv_test()
{
Mat image(200, 150, CV_8UC1);
for (int i = 0; i < image.rows; i++)
{
uchar* p = image.ptr<uchar>(i);
for (int j = 0; j < image.cols; j++)
{
if (i < 80 && i>50)
{
p[j] = 0;
}
else
{
p[j] = 255;
}
}
}
imwrite("demo.jpg", image);
return 0;
}
交叉编译并链接opencv动态库,将编译后的可执行成像了opencv动态库拷贝到板端,执行后得到下面的图片:
opencv移植完成!
5. 参考
https://blog.csdn.net/zhenglie110/article/details/83009675?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control