交叉編譯 opencv-4.10

編譯說明

opencv 下包含很多模塊,各個模塊的作用可以參考Opencv—模塊概覽. 嵌入式考慮有限存儲等因素會對模塊進行裁剪,我這里主要保留圖像拼接(stitching)圖片編解碼(imgcodecs)與特征點匹配(feature2d)及其依賴模塊,下面是編譯過程。

編譯過程

  1. 在 github下載opencv庫.
  2. 配置交叉編譯工具,我這里是 hi3159dv500 的交叉編譯工具鏈,大家根據自己的進行cmake配置。
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)# 環境庫
set(CMAKE_FIND_ROOT_PATH /home/hisi/workspace/hocker/pack/3ds/buildroot/output/hisi_3519/host/aarch64-buildroot-linux-gnu/sysroot)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_SYSROOT ${CMAKE_FIND_ROOT_PATH})# 安裝路徑配置,這個他們需要絕對路徑
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/lib-aarch64" CACHE PATH "Installation Directory")  set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)
# set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH FALSE)
set(CMAKE_FIND_USE_CMAKE_PATH FALS)set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_FIND_ROOT_PATH})
set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_FIND_ROOT_PATH}/usr/lib/pkgconfig)
set(ENV{PKG_CONFIG_PATH} "")set(TARGET_ARCH arm64)
cd build
# rm ../build/* -rf 
# 這里的命令一定要加 TARGET_ARCH=arm64, 不然 編譯 png 的時候 不支持 neno, 導致 imgcodecs 編譯失敗
cmake .. \-DBUILD_LIST=core,imgproc,features2d,stitching,calib3d,flann,imgcodecs \-DBUILD_opencv_dnn=OFF \-DBUILD_opencv_highgui=OFF \-DBUILD_opencv_videoio=OFF \-DBUILD_opencv_calib3d=ON \-DWITH_PYTHON=OFF \-DWITH_opencv_stitching=ON \-DBUILD_opencv_world=OFF \-DBUILD_TESTS=OFF \-DBUILD_EXAMPLES=OFF \-DWITH_GTK=OFF \-DWITH_JPEG=ON \-DWITH_PNG=ON \-DTARGET_ARCH=arm64 \-DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake
make -j8

編譯結果

  1. 編譯過程輸出(這里主要看庫編譯過程,僅供參考)
-- Build files have been written to: /home/hisi/workspace/hocker/3ds/opencv-4.10.0/build
Consolidate compiler generated dependencies of target libopenjp2
Consolidate compiler generated dependencies of target jpeg16-static
Consolidate compiler generated dependencies of target zlib
[  0%] Built target opencv_dnn_plugins
Consolidate compiler generated dependencies of target jpeg12-static
[  0%] Built target opencv_highgui_plugins
[  0%] Built target opencv_videoio_plugins
Consolidate compiler generated dependencies of target libwebp
[  3%] Built target zlib
[  7%] Built target libopenjp2
[ 10%] Built target jpeg16-static
Scanning dependencies of target libpng
Consolidate compiler generated dependencies of target libpng
Consolidate compiler generated dependencies of target libtiff
[ 15%] Built target jpeg12-static
[ 18%] Built target libpng
Consolidate compiler generated dependencies of target libjpeg-turbo
[ 26%] Built target libtiff
Consolidate compiler generated dependencies of target opencv_core
[ 45%] Built target libwebp
[ 54%] Built target libjpeg-turbo
[ 69%] Built target opencv_core
Consolidate compiler generated dependencies of target opencv_version
Consolidate compiler generated dependencies of target opencv_flann
[ 69%] Built target opencv_version
[ 70%] Built target opencv_flann
Consolidate compiler generated dependencies of target opencv_imgproc
[ 82%] Built target opencv_imgproc
Consolidate compiler generated dependencies of target opencv_imgcodecs
Consolidate compiler generated dependencies of target opencv_features2d
[ 90%] Built target opencv_imgcodecs
[ 90%] Built target opencv_features2d
Consolidate compiler generated dependencies of target opencv_calib3d
[ 97%] Built target opencv_calib3d
Consolidate compiler generated dependencies of target opencv_stitching
[100%] Built target opencv_stitching
  1. 編譯出來的庫文件如下
$ ls ../build/lib/ 
libopencv_calib3d.so         libopencv_features2d.so.410     libopencv_imgcodecs.so.4.10.0
libopencv_calib3d.so.410     libopencv_features2d.so.4.10.0  libopencv_imgproc.so
libopencv_calib3d.so.4.10.0  libopencv_flann.so              libopencv_imgproc.so.410
libopencv_core.so            libopencv_flann.so.410          libopencv_imgproc.so.4.10.0
libopencv_core.so.410        libopencv_flann.so.4.10.0       libopencv_stitching.so
libopencv_core.so.4.10.0     libopencv_imgcodecs.so          libopencv_stitching.so.410
libopencv_features2d.so      libopencv_imgcodecs.so.410      libopencv_stitching.so.4.10.0
  1. 編譯出來的庫大小
$ du --max-depth=0 -h ../build/lib/
16M     ../build/lib/
  1. 編譯出來的庫結果
$ file  ../build/lib/libopencv_*.4.10.0
../build/lib/libopencv_calib3d.so.4.10.0:    ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_core.so.4.10.0:       ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_features2d.so.4.10.0: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_flann.so.4.10.0:      ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_imgcodecs.so.4.10.0:  ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_imgproc.so.4.10.0:    ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped
../build/lib/libopencv_stitching.so.4.10.0:  ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, with debug_info, not stripped

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80167.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python cv2對象檢測與跟蹤:從基礎到進階實戰

在計算機視覺領域,對象檢測(定位目標位置)與對象跟蹤(持續追蹤目標運動)是視頻分析、自動駕駛、智能監控等應用的核心技術。本文將結合OpenCV的cv2庫,系統講解其原理與Python實現方法。 一、對象檢測 vs 對…

亞馬遜推出新型倉儲機器人 Vulcan:具備“觸覺”但不會取代人類工人

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

緩存套餐-03.功能測試

一.功能測試 點擊小程序,就會觸發根據分類id查詢套餐方法,根據分類id查詢套餐。 第一次查詢,redis中沒有數據,就會發sql進行sql數據庫查詢。 redis當中就有了對應的緩存。 再次點擊,發現sql根本沒有執行,…

WebFlux與HttpStreamable關系解析

1-Streamable 1-WebFlux與HttpStreamable關系解析2-MCP協議Streamable HTTP 2-參考網址 MCP協議Streamable HTTPMCP協議重大升級,Spring AI Alibaba聯合Higress發布業界首個Streamable HTTP實現方案 3-WebFlux與HttpStreamable關系解析 WebFlux 和 HttpStreamabl…

順豐科技:從 Presto 到 Doris 湖倉構架升級,提速 3 倍,降本 48%

導讀:順豐科技引入 Doris 替換 Presto,在內部可視化數據自助分析工具豐景臺場景廣泛應用。目前,順豐臨時查詢業務、豐景臺報表業務的 Presto 場景已經 100% 切換到 Doris 集群中,日均查詢量 100W。并實現 P95 性能提升近 3 倍&…

如何在Jmeter中調用C程序?

在JMeter中調用C語言程序可以通過以下幾種方式實現: 方法一:使用OS Process Sampler JMeter的“OS Process Sampler”可以用來調用外部程序,包括C語言編寫的可執行文件。 步驟: 準備C語言程序: 編寫C語言代碼并編譯…

python 中的單例

在 Python 里,單例模式指的是一個類僅有一個實例,并且提供一個全局訪問點來獲取該實例。下面為你介紹幾種實現單例模式的常見方法。 1. 使用模塊 在 Python 里,模塊天然就是單例模式。當模塊被導入時,Python 會對其進行一次加載…

Linux58 ssh服務配置 jumpserver 測試雙網卡 為何不能ping通ip地址

判斷為NAT模式網卡 能ping 通外網 ens34為僅主機模式網卡 [rootlocalhost network-scripts]# ip route show default default via 10.1.1.254 dev ens33 proto static metric 100 10.0.0.0/8 dev ens33 proto kernel scope link src 10.1.1.37 metric 100 11.0.0.0/8 dev…

web 自動化之 selenium+webdriver 環境搭建及原理講解

文章目錄 一、web 自動化測試學習說明二、什么 web 自動化測試三、selenium 簡介四、web自動化測試環境搭建五、web 自動化測試第一個腳本六、selenium 原理及源碼講解 一、web 自動化測試學習說明 進階 web 自動化測試學習:掌握 python 編程基礎 二、什么 web 自…

Linux 網絡命名空間:從內核資源管理到容器網絡隔離

1. 網絡命名空間是什么? 網絡命名空間(Network Namespace) 是 Linux 內核提供的一種網絡資源隔離機制,用于為進程或容器創建完全獨立的網絡環境。它并非物理或虛擬的網絡接口(如網卡、veth pair 等),而是一個虛擬容器,包含以下資源的獨立實例: 網絡接口(物理或虛擬)…

SQL知識點總結

總結的知識點主要來源于前段時間在牛客刷SQL題目中遇到的錯誤 目錄 1.WHERE字句不能與高級函數連用 2.去重——distinct 3.不等于某個值 4.查多個范圍內的值 5. 升/降序排序 6.占位符 7.統計某類別總數計算平均值 8.合并查詢——UNION (ALL) 9…

【軟考-高級】【信息系統項目管理師】【論文基礎】采購管理過程輸入輸出及工具技術的使用方法

采購管理概念 項目采購管理包括從項目團隊外部采購或獲取所需產品、服務或成果的各個過程。項目采購管理包括編制和管理協議所需的管理和控制過程,例如合同、訂購單、協議備忘錄(MOA)和服務水平協議(SLA)。 采購管理…

C++ 手寫一個內存池

內存池是一種內存管理技術,它預先分配一大塊內存,之后將其按需分割成多個小塊供程序使用。下面將詳細闡述它的好處以及適用場景。 內存池的好處 減少內存碎片:在動態內存分配時,頻繁地分配和釋放不同大小的內存塊,會…

LeetCode 3341.到達最后一個房間的最少時間 I:Dijkstra算法(類似深搜)-簡短清晰的話描述

【LetMeFly】3341.到達最后一個房間的最少時間 I:Dijkstra算法(類似深搜)-簡短清晰的話描述 力扣題目鏈接:https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-i/ 有一個地窖,地窖中有 n x m 個房間…

學習Linux的第四天

今天我們來學習Linux的網絡配置,以及鏈表的知識開個小頭 三種網絡配置模式 橋接模式(用的最多) 2.Nat模式 3. 僅主機模式(Nat模式的功能外,只能在局域網通信,不能訪問外網) 橋接模式&#xf…

【 window.addEventListener(‘message‘, handleMessage)無效的問題】

在react native加載中可能出現 window.addEventListener(‘message’, handleMessage)無效,無法監聽到在react-native-webview中通過postMessage發送的消息,可以通過下面的方法來處理 window.addEventListener(message, handleMessage);document.addEven…

css識別\n換行

在CSS中,\n 通常不會被識別為換行符。如果你希望在CSS中實現換行效果,可以使用以下幾種方法: 使用 white-space 屬性: 設置 white-space: pre 或 white-space: pre-wrap,這樣文本中的換行符 \n 會被保留并顯示為換行。…

電容知識小結

1.同樣是電容,1uf的陶瓷電容和1uf的鋁電解電容是不一樣的; 2.實際的電容等效為ESR C ESL;ESR等效電阻和ESL等效電感; 3.鋁電解電容,瓷片電容和鉭電容。 4.電容是容納和釋放電荷的電子器件; 5.電容的工作:…

[逆向工程]什么是HOOK(鉤子)技術(二十一)

[逆向工程]什么是HOOK(鉤子)技術(二十一) HOOK(鉤子)是一種系統級或應用級的消息攔截與處理機制,廣泛用于監控、修改或增強程序行為。其核心思想是在特定事件(如鍵盤輸入、函數調用…

java后端知識點復習

# 復習匯總 ### 🧑?💻 User java關于高并發下的銀行轉賬問題,根據具體的例子來講解清楚 --- ### 🤖 Assistant --- ### 🧑?💻 User java關于高并發下的銀行轉賬問題,根據具體的例子來講…