参考:https://blog.csdn.net/wave789/article/details/131804601
https://zhuanlan.zhihu.com/p/585528434
在PC端:
使用rknn_model_zoo推荐的交叉编译工具:gcc-linaro-6.3.1(aarch64)
下载后解压
克隆opencv,opencv_contrib(按个人需求)
进入opencv目录下,创建build,install两个目录
进入build目录,执行cmake
cmake -D TARGET_SOC=rk3588 -D CMAKE_SYSTEM_NAME=Linux -D CMAKE_SYSTEM_PROCESSOR=aarch64 -D CMAKE_BUILD_TYPE=Release -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_C_COMPILER=xxx/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc # 替换成自己环境下交叉编译工具gcc的路径 \
-D CMAKE_CXX_COMPILER=/home/wxg/jhq/code/about_rknn/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ # 替换成自己环境下交叉编译工具g++的路径\
-D BUILD_SHARED_LIBS=OFF -D CMAKE_CXX_FLAGS=-fPIC -D CMAKE_C_FLAGS=-fPIC -D CMAKE_EXE_LINKER_FLAGS="-lpthread -ldl" -D ENABLE_PIC=OFF -D WITH_1394=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=OFF -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=ON -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 -D BUILD_JAVA=OFF -D BUILD_opencv_python3=OFF -D CMAKE_INSTALL_PREFIX=../install -D WITH_GTK=OFF -D WITH_EIGEN=OFF \
-D OPENCV_EXTRA_MODULES_PATH="xxx/opencv_contrib/modules" # 替换成自己环境下opencv_contrib路径\
-D BUILD_ZLIB=ON -D ZLIB_INCLUDE_DIR="../3rdparty/zlib" -D OPENCV_GENERATE_PKGCONFIG=ON ..
执行make
make install
编译的静态库会安装在install目录下
编写测试代码test_opencv,目录结构如下,demo.jpeg随便找张测试图片即可:
main.cpp:
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
int main(int argc, char const *argv[])
{
cv::Mat img = cv::imread("demo.jpeg"); //替换成自己目录下的图片名称
std::cout << "width: " << img.cols << std::endl;
std::cout << "height: " << img.rows << std::endl;
std::cout << "channel: " << img.channels() << std::endl;
cv::imwrite("output.jpg", img);
return 0;
}
CMakeLists.txt:
project(test_opencv)
add_compile_options(-fPIC)
set(OpenCV_DIR xxx/install/lib/cmake/opencv4) # xxx替换成自己opencv的install目录,此目录包含OpenCVConfig.cmake
find_package(Iconv)
find_package(OpenCV REQUIRED)
add_executable(test_opencv main.cpp)
target_link_libraries(test_opencv ${OpenCV_LIBS})
install(TARGETS ${PROJECT_NAME} DESTINATION .)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/demo.jpeg DESTINATION .)
进入build目录, cmake
cmake .. -DTARGET_SOC=rk3588 -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_BUILD_TYPE=Release -D CMAKE_C_COMPILER=xxx/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc # 替换成自己的交叉编译工具gcc路径\
-D CMAKE_CXX_COMPILER=xxx/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ # 替换成自己的交叉编译工具g++路径\
-DCMAKE_INSTALL_PREFIX=../demo
将demo路径下的东西scp到rk588上,运行
在wsl环境下修改以上cmake配置环境相关的编译选项后,3rdparty里面没有liblibopenjp2.a
编译代码时报:/usr/bin/ld: cannot find -lopenjp2: No such file or directory
是编译opencv时没有生成openjp2的静态库导致的
解决参考:WSL2编译安装opencv时出现#include<openjepg.h>报错
Try to build OpenCV 4.5 in WSL2 but fail with openjpeg
cmake 编译选项:
添加了:-D BUILD_OPENJPEG=ON -D BUILD_JASPER=ON -D BUILD_OPENJPEG2=ON
cmake -D CMAKE_SYSTEM_NAME=Linux -D CMAKE_SYSTEM_PROCESSOR=x64 -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=OFF -D CMAKE_CXX_FLAGS=-fPIC -D CMAKE_C_FLAGS=-fPIC -D CMAKE_EXE_LINKER_FLAGS="-lpthread -ldl" -D ENABLE_PIC=OFF -D WITH_1394=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=OFF -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=ON -D WITH_PROTOBUF=ON -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 -D BUILD_JAVA=OFF -D BUILD_opencv_python3=OFF -D CMAKE_INSTALL_PREFIX=../../install/x64 -D WITH_GTK=OFF -D WITH_EIGEN=OFF
-D BUILD_OPENJPEG=ON -D BUILD_JASPER=ON -D BUILD_OPENJPEG2=ON
-D BUILD_ZLIB=ON -D OPENCV_EXTRA_MODULES_PATH="../../../opencv_contrib/modules" -D ZLIB_INCLUDE_DIR="../../3rdparty/zlib" -D OPENCV_GENERATE_PKGCONFIG=ON ../..
在安装目录能找到该静态库,问题解决