Linux交叉編譯opencv并移植ARM端

Linux交叉編譯opencv并移植ARM端 - 知乎

一、安裝交叉編譯器

目標平臺為arm7l,此為32位ARM架構,要安裝合適的編譯器

sudo apt install arm-linux-gnueabihf-gcc
sudo apt install arm-linux-gnueabihf-g++

注意:64位ARM架構的編譯器與32位ARM架構的編譯器不能通用

二、opencv交叉編譯

opencv的交叉編譯工具鏈在../opencv3.2.0/platforms/linux 路徑下,linux文件夾下是一些.cmake文件,對應不同的移植對象,我需要在rv1126上部署模型,所以選擇platform/linux/arm-gnueabi.toolchain.cmake

你也可以對其作出修改(添加編譯器所在位置):

set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(GNU_MACHINE "arm-linux-gnueabi" CACHE STRING "GNU compiler triple")set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++)include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")

接下來執行交叉編譯命令

mkdir build && cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/mnt/usr/local -D OPENCV_EXTRA_MODULES_PATH=/opt/opencv/opencv_contrib/modules/ -D OPENCV_ENABLE_NONFREE=True -DCMAKE_TOOLCHAIN_FILE=/opt/opencv/platforms/linux/arm-gnueabi.toolchain.cmake ..sudo make -j8
sudo make install
gnueabi.toolchain.cmake沒有修改,也能找到編譯器位置

編譯結束后進入 build 文件夾,里面生成bin,include,lib,share四個文件夾

三、Linux上生成ARM架構下可執行文件

創建測試用例test.cpp,內容如下

#include <opencv2/opencv.hpp>using namespace cv; int main( int argc, char** argv )  
{  Mat image;  image = imread( "7.bmp", 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::LINE_AA );                 	imwrite("8.bmp", image);        return 0;  
}

CMakeList.txt

cmake_minimum_required(VERSION 2.8.4)project(draw_image)
include ($ENV{HOME}/configs/cross.cmake)find_package(OpenCV REQUIRED)
add_executable(${CMAKE_PROJECT_NAME} test.cpp)
target_include_directories(draw_image PUBLIC ${OpenCV_INCLUDE_DIRS})
target_link_libraries(draw_image PRIVATE ${OpenCV_LIBS})
~                                                        

在終端執行:
?

mkdir build && cd buid
cmake ..
make

在test.cpp同一目錄下會生成可執行文件 draw_image,利用file draw_image檢查可執行文件格式是否支持arm

draw_image: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=6030f6191b409626a1f54c996cebb91aad644061, for GNU/Linux 3.2.0, not stripped

出現如上結果說明可執行文件支持ARM7l

四、移植ARM端執行

將 build文件夾里面的include和lib里的文件分別拷貝到ARM板的/usr/include 和/usr/lib下 然后打開終端執行可執行文件即可。

build文件里include也許是空的,你可以在安裝目錄/include/找到opencv的頭文件

draw_image可以執行

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

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

相關文章

【MyBatis】查詢數據庫

目錄 一、什么是MyBatis 二、MyBatis框架的搭建 1、搭建MyBatis框架 2、設置MyBaits項目的配置 三、使用MyBatis完成數據庫的操作 1、MyBatis程序中sql語句的即時執行和預編譯 1.1、即時執行&#xff08;${}&#xff09; 1.2、預編譯&#xff08;#{}&#xff09; 1.3、即…

tomcat設置PermSize

最近tomcat老是報錯,查看了日志出現PermGen 內存不夠用,重啟tomcat后查詢使用情況 通過啟動參數發現沒有設置 PermGen,繼續通過jmap查看 jmap -heap 21179 發現99%已使用,而且默認是30.5M,太小了,這里設置成256M 1. 創建setenv.sh文件 在/usr/local/tomcat/bin目錄下創建一個…

解鎖編程的新契機:深入探討Kotlin Symbol Processor (KSP)的編寫

解鎖編程的新契機&#xff1a;深入探討Kotlin Symbol Processor (KSP)的編寫 1. 引言 隨著軟件開發領域的不斷發展&#xff0c;新的工具和技術不斷涌現&#xff0c;以滿足開發者在構建高效、可維護和創新性的代碼方面的需求。Kotlin Symbol Processor&#xff08;KSP&#xf…

從零開始,快速打造租車服務小程序的分享

隨著移動互聯網的發展&#xff0c;小程序成為了企業推廣和服務的重要手段之一。租車服務行業也不例外&#xff0c;通過打造一款租車服務小程序&#xff0c;企業可以更好地與用戶進行互動和交流&#xff0c;提供更方便快捷的租車服務。本文將介紹如何利用第三方制作平臺/工具快速…

PHP實現在線年齡計算器

1. 輸入日期查詢年齡 2. php laravel框架實現 代碼 /*** 在線年齡計算器*/public function ageDateCal(){// 輸入的生日時間$birthday $this->request(birthday);// 當前時間$currentDate date(Y-m-d);// 計算周歲$age date_diff(date_create($birthday), date_create($…

Eleastisearch5.2.2利用鏡像遷移構建實例后ES非健康狀態

正常遷移完成后啟動服務&#xff0c;查看ES非健康狀態 此時觀察ES集群狀態&#xff1a;curl -XGET -u elastic:xxx localhost:9200/_cluster/health?pretty 注意到"active_shards_percent_as_number" : 88.8888 該項的值不產生變化;集群狀態"status" : “…

8-1 統計字符

本題要求編寫程序&#xff0c;輸入10個字符&#xff0c;統計其中英文字母、空格或回車、數字字符和其他字符的個數。 輸入格式: 輸入為10個字符。最后一個回車表示輸入結束&#xff0c;不算在內。 輸出格式: 在一行內按照 letter 英文字母個數, blank 空格或回車個數, d…

升級指定版本Node.js或npm

一. 下載指定node.js版本Node.js 二. 升級node.js版本 打開電腦cmd 輸入 npm install node18.17.1 -g 三. 升級npm版本 打開電腦cmd 輸入 npm install npm8.1.2 -g

SQL注入之Oracle注入

SQL注入之Oracle注入 7.1 SQL注入之Oracle環境搭建 前言 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或簡稱Oracle。是甲骨文公司的一款關系數據庫管理系統。它是在數據庫領域一直處于領先地位的產品。可以說Oracle數據庫系統是世界上流行的關系數據庫管理系統…

在WordPress站點中展示閱讀量等流量分析數據(超詳細實現)

這篇文章也可以在我的博客中查看 關于本文 專業的流量統計系統能夠相對真實地反應網站的訪問情況。 這些數據可以在后臺很好地進行分析統計&#xff0c;但有時我們希望在網站前端展示一些數據 最常見的情景就是&#xff1a;展示頁面的瀏覽量 這簡單的操作當然也可以通過簡單…

(el-Form)操作(不使用 ts):Element-plus 中 Form 表單組件校驗規則等的使用

Ⅰ、Element-plus 提供的 Form 表單組件與想要目標情況的對比&#xff1a; 1、Element-plus 提供 Form 表單組件情況&#xff1a; 其一、Element-plus 自提供的 Form 代碼情況為(示例的代碼)&#xff1a; // Element-plus 自提供的代碼&#xff1a; // 此時是使用了 ts 語言環…

6.3 社會工程學攻擊

數據參考&#xff1a;CISP官方 目錄 社會工程學攻擊概念社會工程學攻擊利用的人性 “弱點”典型社會工程學攻擊方式社會工程學攻擊防護 一、社會工程學攻擊概念 什么是社會工程學攻擊 也被稱為 "社交工程學" 攻擊利用人性弱點 (本能反應、貪婪、易于信任等) 進…

螢石直播以及回放的接入和銷毀

以下基于vue項目 1.安裝 npm i ezuikit-js 2、導入 main.js中 import EZUIKit from "ezuikit-js"; //導入螢石Vue.use(EZUIKit); 3、創建容器 <div class"video"><div id"video-container"></div><!-- <iframe :src…

棧存儲結構詳解

目錄 棧存儲結構詳解 進棧和出棧 棧的具體實現 棧的應用 什么是隊列&#xff08;隊列存儲結構&#xff09; 棧存儲結構詳解 同順序表和鏈表一樣&#xff0c;棧也是用來存儲邏輯關系為 "一對一" 數據的線性存儲結構&#xff0c;如圖 1 所示。 圖 1 棧存儲結構示意…

HTML5的介紹和基本框架

目錄 HTML5 HTML5介紹 HTML5的DOCTYPE聲明 HTML5基本骨架 html標簽 head標簽 body標簽 title標簽 meta標簽 在vscode中寫出第一個小框架 HTML5 HTML5介紹 HTML5是用來描述網頁的一種語言&#xff0c;被稱為超文本標記語言。用HTML5編寫的文件&#xff0c;后綴以.ht…

設備加密狗

場景描述 隨著科技的飛速發展&#xff0c;越來越多的智能設備走進生產加工車間。例如智能雕刻機、鈑金機、 榫槽機、鉆孔機、磨刀機等等。 目前市場的智能設備具有一個共同的特點&#xff0c;內置嵌入操作系統&#xff0c;如windows或者linux系統。設備制造商提供智能設備出…

20天學會rust(四)常見系統庫的使用

前面已經學習了rust的基礎知識&#xff0c;今天我們來學習rust強大的系統庫&#xff0c;從此coding事半功倍。 集合 數組&可變長數組 在 Rust 中&#xff0c;有兩種主要的數組類型&#xff1a;固定長度數組&#xff08;Fixed-size Arrays&#xff09;和可變長度數組&…

Ajax如何理解

什么是ajax ●認識前后端交互 ○就是 前端 與 后端的 一種通訊方式 ○主要使用的技術棧就是 ajax (async javascript and xml) ●ajax 特點 ○使用 ajax 技術網頁應用能夠快速的將新內容呈現在用戶界面 ○并且不需要刷新整個頁面, 也就是能夠讓頁面有 "無…

Java技術整理(5)—— Spring篇

Spring是一個全面的全面的、企業應用開發一站式的解決方案&#xff0c;貫穿表現層、業務層、持久層。但是 Spring 仍然可以和其他的框架無縫整合。 1、Spring的核心組件 &#xff08;1&#xff09;數據層&#xff1a; JDBC、ORM、OXM、JMS、Transations &#xff08;2&#x…

Flutter 中,ListView 中需要放置 ListView 需要怎么處理才高效?

問題及場景 ListView 是 Flutter 開發者第一個學習到的 Widget&#xff0c;因為它可以滑動。一切都會運行得很好&#xff0c;直到 ListView 中的 Item 本身也是一個 ListView。你可能會看到 Flutter 建議你將內部的 ListView 的ShrinkWrap 屬性設置為 True。雖然錯誤消除了&am…