hi3516dv300 opencv4
OpenCV在Hi3519AV100平台的交叉编译_人工智能_wang3141128的博客-CSDN博客
新建文件arm-himix200.cmake,在里面添加如下内容(注意海思编译器路径要正确,下面内容改为自己的路径)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_CXX_COMPILER arm-himix200-linux-g++)
SET(CMAKE_C_COMPILER arm-himix200-linux-gcc)
SET(CMAKE_FIND_ROOT_PATH /opt/hisi-linux/x86-arm/arm-himix200-linux/bin)
生成makefile
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/himix200.toolchain.cmake ..
cmake ../opencv-3.4.0 \
-DCMAKE_TOOLCHAIN_FILE=./arm-himix200.cmake \
-DCMAKE_INSTALL_PREFIX=./lib \
-DCMAKE_INSTALL_INCLUDEDIR=./include \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_JPEG=ON \
-DWITH_1394=OFF \
-DWITH_GTK=OFF \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_C_COMPILER=arm-himix200-linux-gcc \
-D CMAKE_CXX_COMPILER=arm-himix200-linux-g++ \
-D BUILD_SHARED_LIBS=ON \
-D CMAKE_CXX_FLAGS=-fPIC \
-D CMAKE_C_FLAGS=-fPIC \
-D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl \
-D ENABLE_PIC=ON \
-D WITH_1394=OFF \
-DWITH_GTK=OFF \
-D WITH_ARAVIS=OFF \
-D WITH_ARITH_DEC=ON \
-D WITH_ARITH_ENC=ON \
-D WITH_CLP=OFF \
-D WITH_CUBLAS=OFF \
-D WITH_CUDA=OFF \
-D WITH_CUFFT=OFF \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER_0_10=OFF \
-D WITH_HALIDE=OFF \
-D WITH_HPX=OFF \
-D WITH_IMGCODEC_HDR=ON \
-D WITH_IMGCODEC_PXM=ON \
-D WITH_IMGCODEC_SUNRASTER=ON \
-D WITH_INF_ENGINE=OFF \
-D WITH_IPP=OFF \
-D WITH_ITT=OFF \
-D WITH_JASPER=ON \
-D WITH_JPEG=ON \
-D WITH_LAPACK=ON \
-D WITH_LIBREALSENSE=OFF \
-D WITH_NVCUVID=OFF \
-D WITH_OPENCL=OFF \
-D WITH_OPENCLAMDBLAS=OFF \
-D WITH_OPENCLAMDFFT=OFF \
-D WITH_OPENCL_SVM=OFF \
-D WITH_OPENEXR=OFF \
-D WITH_OPENGL=OFF \
-D WITH_OPENMP=OFF \
-D WITH_OPENNNI=OFF \
-D WITH_OPENNNI2=OFF \
-D WITH_OPENVX=OFF \
-D WITH_PNG=OFF \
-D WITH_PROTOBUF=OFF \
-D WITH_PTHREADS_PF=ON \
-D WITH_PVAPI=OFF \
-D WITH_QT=OFF \
-D WITH_QUIRC=OFF \
-D WITH_TBB=OFF \
-D WITH_TIFF=ON \
-D WITH_VULKAN=OFF \
-D WITH_WEBP=ON \
-D WITH_XIMEA=OFF \
.. (注意有两个点点)
执行make,开始编译
make
可能报错:opencv-3.4.0/3rdparty/libpng/pngstruct.h:30:18: fatal error: zlib.h: No such file or directory
修改 opencv-3.4.0/3rdparty/libpng 下的 CMakeLists.txt
在 ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}" ${ZLIB_INCLUDE_DIRS}) 前添加
set(ZLIB_INCLUDE_DIRS "/home/share/opencv/opencv-3.4.0/3rdparty/zlib/")
注意修改上面路径。清除cmake,然后重新cmake & make
可能还有其他类似以上报错,处理方式一样。
make无报错后,执行make install,安装OpenCV
make install
命令执行成功,可以看到OpenCV交叉编译生成的库文件、头文件放在 /hisi_build/lib 下。
4 测试程序
编写简单测试代码(draw_image.cpp),实现图片上画矩形框,代码如下
#include <opencv2/opencv.hpp>
using namespace cv;
int main( int argc, char** argv )
{
Mat image;
image = imread( "test.jpeg", 1 );
if( !image.data )
{
printf( "No image data \n" );
return -1;
}
cv::Point lu = cv::Point(180, 60);
cv::Point rd = cv::Point(400, 260);
cv::rectangle(image, lu, rd, cv::Scalar( 255, 20, 0 ), 1, CV_AA );
imwrite("test_draw.jpeg", image);
return 0;
}
编译,注意下面头文件路径./include/和库文件路径./lib/为你交叉编译生成的路径
arm-himix200-linux-g++ -o draw_image draw_image.cpp -I ./include/ ./lib/libopencv_core.so ./lib/libopencv_imgcodecs.so ./lib/libopencv_imgproc.so
执行
将可执行文件、测试图片和OpenCV库文件nfs到单板,注意库文件一般放在/usr/lib下。执行成功可以看到生成 test_draw.jpeg图片,图片上画了矩形框。
————————————————
版权声明:本文为CSDN博主「wung314」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wang3141128/article/details/97620411
0. 安装Hi3516DV300编译环境
参考海思自带手册安装即可(我这里安装的是arm-himix200-linux工具链)
export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH
export LC_ALL=C
1. 下载OpenCV源码
登录https://opencv.org/releases/,选择相应的版本进行下载。使用的版本是Open CV - 4.1.0
2. 编译前的准备工作
2.1 如果是git clone下载的,直接进入到OpenCV源码根目录;如果下载的是zip文件,则需要先运行unzip opencv-4.1.10.zip命令解压,之后再进入到源码根目录;
2.2 建立build文件夹和output文件夹,命令如下:
$mkdir build
$mkdir output
2.3进入build文件夹,命令如下:
$cd build
3. 编译
3.1修改源码根目录的CMakeLists.txt
在657行ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})的下边添加一行内容:
ocv_include_directories(./3rdparty/zlib/)
3.2 如果缺少zlib库请执行以下命令
sudo apt-get install zlib1g-dev
3.3 使用camke进行编译
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=../output \
-D CMAKE_C_COMPILER=/opt/hisi-linux/x86-arm/arm-himix200-linux/host_bin/arm-linux-gnueabi-gcc \
-D CMAKE_CXX_COMPILER=/opt/hisi-linux/x86-arm/arm-himix200-linux/host_bin/arm-linux-gnueabi-g++ \
-D CMAKE_EXE_LINKER_FLAGS=-lpthread -lrt -ldl \
-D BUILD_SHARED_LIBS=ON \
-D BUILD_ZLIB=ON \
-D ZLIB_INCLUDE_DIR=../3rdparty/zlib \
../
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源码的位置。
3.4 CMake完成后,执行make命令
$ make
$ make install
3.5 最终在{OpenCV 源码根目录}/output下生成了以下内容:
至此,OpenCV在Hi3516DV300的移植任务圆满结束.
4. 在项目中引用opencv动态库
4.1 在makefile文件中,加入下面内容
#调用opencv编译生成的库文件
CFLAGS += `pkg-config --cflags --libs opencv`
#设置编译器
CC = arm-himix200-linux-g++
4.2 安装pkg-config
sudo apt install pkg-config
4.3 设置opencv的pc文件的环境变量
vim ~/.bashrc
加入export PKG_CONFIG_PATH="/home/zdst/opencv/output/lib/pkgconfig"
- 2