hi3516dv300 opencv4


原文链接: 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


`