在嵌入式應用開發領域,OpenCV憑借其豐富的功能成為開發者處理計算機視覺任務的首選工具。Buildroot為開發者提供了便捷的嵌入式系統構建環境,其默認集成的OpenCV版本為4.5.4。 然而實際應用中,不同項目對功能、性能等方面常有特定需求,開發者可能需要使用其他版本的OpenCV,此時便需替換Buildroot的默認配置。 同時,為滿足更復雜場景需求并擴展功能,添加OpenCV的contrib模塊也便成了常見工作,下面將詳細介紹這一過程的實現。
場景1:配置Buildroot中默認OpenCV版本
Buildroot源碼中默認的OpenCV版本為4.5.4
1、由于Linux5.10.209系統默認是不編譯Buildroot 的,所以首先需要在虛擬機上編譯一遍Buildroot,方法見附件《ELF 2開發板編譯手冊》
2、Linux5.10.209內核版本的Buildroot系統里的OpenCV默認配置的版本是4.5.4
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh bconfig
路徑如下:
-> Target packages
-> Libraries
-> Graphics
-> opencv4 
再按下“Enter”鍵進入OpenCV4里面進行選擇,選擇樣式如下圖(注意和紅色框選擇的一樣即可):

修改完成之后保存退出。
3、編譯Buildroot
elf@ubuntu:~/work/ELF2-linux-source$./build.sh rootfsELF2-linux-source/buildroot/output/elf2_fs/host/aarch64-buildroot-linux-gnu/sysroot/usr/目錄下會有一個include目錄和一個lib目錄,編譯出的OpenCV庫頭文件與庫文件就放在這兩個目錄里。
在include目錄里可以找到OpenCV4目錄,在lib目錄里可以找到libopencv_*開頭的所有OpenCV庫文件,說明你已將OpenCV加入到Buildroot系統中。
場景2:Buildroot中更換OpenCV版本
參考場景1,只需在Buildroot中完成OpenCV的配置添加,無需執行文件系統編譯。
1、虛擬機安裝sha校驗工具
sudo apt-getinstall hashalot2、更換版本需要刪除ELF2-linux-source/buildroot/package/opencv4/目錄下的patch 文件
elf@ubuntu:~/work/ELF2-linux-source$rm buildroot/package/opencv4/0001-modules-videoio-src-cap_ffmpeg_impl.hpp-fix-build-wi.patch3、修改ELF2-linux-source/buildroot/package/opencv4/opencv4.mk文件。修改版本為4.10.0, 添加OpenCL支持
#改一下version,然后針對不同版本編譯選項做修改即可
#OPENCV4_VERSION = 4.5.4
OPENCV4_VERSION = 4.10.0
OPENCV4_SITE = $(call github,opencv,opencv,$(OPENCV4_VERSION))
OPENCV4_INSTALL_STAGING = YES
OPENCV4_LICENSE = Apache-2.0
OPENCV4_LICENSE_FILES = LICENSE
OPENCV4_CPE_ID_VENDOR = opencv
OPENCV4_CPE_ID_PRODUCT = opencv
OPENCV4_SUPPORTS_IN_SOURCE_BUILD = NO
# Disabled features (mostly because they are not available in Buildroot), but
# - eigen: OpenCV does not use it, not take any benefit from it.
OPENCV4_CONF_OPTS += \
-DWITH_1394=OFF \
-DWITH_CLP=OFF \
-DWITH_EIGEN=OFF \
-DWITH_GDAL=OFF \
-DWITH_GPHOTO2=OFF \
-DWITH_GSTREAMER_0_10=OFF \
-DWITH_LAPACK=OFF \
-DWITH_MATLAB=OFF \
# -DWITH_OPENCL=OFF
-DWITH_OPENCL=ON \ #添加OpenCL支持
-DWITH_OPENCL_SVM=OFF \
-DWITH_OPENEXR=OFF \
-DWITH_OPENNI2=OFF \
-DWITH_OPENNI=OFF \
-DWITH_UNICAP=OFF \
-DWITH_VA=OFF \
-DWITH_VA_INTEL=OFF \
-DWITH_VTK=OFF \
-DWITH_XINE=OFF4、編譯Buildroot
修改完成后,執行編譯Buildroot 的命令,會自動下載OpenCV4.10.0 的壓縮包到ELF2-linux-source/buildroot/output/elf2_fs/build/目錄下。
elf@ubuntu:~/work/ELF2-linux-source$./build.sh rootfsELF2-linux-source/buildroot/output/elf2_fs/host/aarch64-buildroot-linux-gnu/sysroot/usr/目錄會有一個include目錄和一個lib目錄,編譯出的OpenCV庫頭文件與庫文件就放在這兩個目錄里。
場景3:添加OpenCV第三方庫contrib
OpenCV在視覺算法中的功能非常強大,其中一個原因就是該算法庫一直在與時俱進的更新最新的算法,對于具有專利的算法(如SURF)以及一些還沒有穩定的算法,OpenCV會將其置于擴展模塊中,這些擴展模塊包含在opencv_contrib代碼庫中。
對于該第三方庫,選擇手動編譯,不使用buildroot構建。
1、需要先確認OpenCV4,ELF2-linux-source/buildroot/output/elf2_fs/build/路徑下安裝有OpenCV4 的文件夾
2、將附件OpenCV4-contrib-4.5.5 壓縮包解壓到ELF2-linux-source/buildroot/output/elf2_fs/build/目錄
源碼:https://github.com/opencv/opencv_contrib contrib的git 倉庫。
3、配置cmake 工具
sudo apt-getinstall cmake由于沒有Buildroot幫我們配置交叉編譯器。所以需要我們自行配置。
進到ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0/platforms/linux/
路徑下,修改aarch64-gnu.toolchain.cmake文件。將GNU_MACHINE的路徑替換成Buildroot 系統里自帶的交叉編譯器的路徑+前綴。
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(GNU_MACHINE "/home/elf/work/ELF2-linux-source/buildroot/output/elf2_fs/host/bin/aarch64-buildroot-linux-gnu" CACHE STRING "GNU compiler triple")
include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")4、進入到ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0/
目錄, 創建一個名為build和add_contrib_install的文件夾,然后進入build,通過如下命令,編譯OpenCV4.10.0及contrib第三方庫
elf@ubuntu:~/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0$ mkdir build
elf@ubuntu:~/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0$ mkdir add_contrib_install
elf@ubuntu:~/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0$ cd build
elf@ubuntu:~/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0/build$ cmake .. -D CMAKE_INSTALL_PREFIX=../add_contrib_install -DCMAKE_TOOLCHAIN_FILE=/home/elf/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0/platforms/linux/aarch64-gnu.toolchain.cmake -DOPENCV_EXTRA_MODULES_PATH=/home/elf/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv_contrib-4.5.5/modules -DBUILD_opencv_xphoto=OFF -DBUILD_opencv_rgbd=OFF -DBUILD_opencv_ximgproc=OFF -DBUILD_opencv_xfeatures2d=OFFCMAKE_INSTALL_PREFIX:表示生成的bin和libs的存放路徑。
DCMAKE_TOOLCHAIN_FILE:表示cmake交叉編譯器的路徑。
DOPENCV_EXTRA_MODULES_PATH:表示contrib源碼中modules的路徑。
5、make進行編譯
執行nproc,查看虛擬機有幾個核。返回值為4,所以執行make -j4。
elf@ubuntu:~/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0/build$ nproc
4
elf@ubuntu:~/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.10.0/build$ make -j46、執行make install
生成的bin和lib 將被install到CMAKE_INSTALL_PREFIX宏指定的../add_contrib_install目錄中。
將add_contrib_install 目錄中 的lib和include 目錄下的文件復制到開發板上。
elf@ubuntu:~/work/ELF2-linux-source/buildroot/output/elf2_fs/build/opencv4-4.1 -
單片機
+關注
關注
6074文章
45368瀏覽量
664654 -
嵌入式
+關注
關注
5189文章
20192瀏覽量
329549 -
OpenCV
+關注
關注
33文章
651瀏覽量
44486 -
Linux開發
+關注
關注
0文章
44瀏覽量
7625 -
RK3588
+關注
關注
8文章
503瀏覽量
7099
發布評論請先 登錄
ElfBoard技術貼|如何在【RK3588】ELF 2開發板上進行根系統的定制
ElfBoard技術貼|如何在【RK3588】ELF 2開發板上進行UART引腳復用配置
ElfBoard技術貼|如何在【RK3588】ELF 2開發板實現I2C功能復用
鴻蒙開發中怎么引入第三方庫
如何在Raspberry Pi 3上安裝OpenCV4庫
rk3588有哪些開發板?
ElfBoard技術貼|如何在【RK3588】ELF 2開發板用戶空間更換開機Logo

ElfBoard技術貼|如何在【RK3588】ELF 2開發板中安裝openCV4以及第三方庫contrib
評論