【Linux】編譯安裝 opencv 并鏈接到 VSCode

一、背景

? ? ? ? 最近打算把現有的一個 python 程序用 c++ 重寫,進一步提升性能。編輯器使用 VSCode,三方庫需要用到 opencv,要進行編譯安裝。

二、編譯安裝 opencv

1. 更新源

sudo apt update && sudo apt upgrade

2. 安裝依賴庫

安裝編譯 opencv 所需的依賴庫

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran

如果安裝失敗,需要更換 apt 源,比如阿里源,老生常談的問題了。

3. 安裝 opencv?

3.1 下載源碼包

從 github 下載 opencv 和 opencv-contrib?源碼包,本人用的版本是 4.9.0,下載完成后解壓

?3.2 編譯安裝

首先在當前目錄下新建 build 文件夾

cd opencv-4.9.0
mkdir build && cd build

使用如下命令生成編譯配置文件

cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 \-D OPENCV_EXTRA_MODULES_PATH=/home/rockchip/opencv_contrib-4.9.0/modules/ \-D OPENCV_GENERATE_PKGCONFIG=YES \-D ENABLE_PRECOMPILED_HEADERS=OFF ..

????????由于添加了 opencv 擴展庫,cmake 過程中會下載一些模型和文件,比如微信二維碼識別(4.5.2 之后新增模塊)模型和人臉檢測模型,在不掛代理的情況下會等待很長一段時間嘗試下載并最終提示下載失敗。實測在使用代理時,wechat_qrcode 模塊需要的模型文件和 xfeatures2d 模塊需要的 .i 文件可以正常下載,但 face 模塊需要的 face_landmark_model.dat 文件始終無法下載成功。如果實際程序中用不到自帶的人臉檢測模塊,可以找到該模塊的 CMakeLists.txt 文件,將下載相關代碼注釋掉,確保 cmake 流程可以正常進行。

cd /home/rockchip/opencv_contrib-4.9.0/modules/face

在該目錄下打開 CMakeLists.txt,注釋掉 13-27 行。?

? ? ? ? 如果需要用到該模型又無法使用代理,可以手動下載該文件,然后將其放到 opencv-4.9.0/.cache/data 目錄下,并重命名為 "7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat",即可。

? ? ? ? 至于 qrcode 模型和 xfeatures2d 用到的 .i 文件,文件太多就不一一放鏈接了,.i 文件可以在這位大佬的?github?上下載,qrcode 模型網上搜一下就能下載。下載完后分別放到這兩個目錄下

# qrcode 模型存放目錄

/path/to/opencv_contrib-4.9.0/modules/wechat_qrcode/downloads/wechat_qrcode

# .i 文件存放目錄

/path/to/opencv_contrib-4.9.0/modules/xfeatures2d/src

之后可以開始編譯安裝了

make -j4 && sudo make install

大概等待幾十分鐘就可以安裝完成了。

3.3 配置環境變量

打開 bashrc 文件

sudo vi ~/.bashrc

文件末尾添加環境變量,保證程序編譯時能正確找到 opencv 庫

export PATH=/usr/local/opencv4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/opencv4/lib:$LD_LIBRARY_PATH
export CPLUS_INCLUDE_PATH=/usr/local/opencv4/include:$CPLUS_INCLUDE_PATH
export PKG_CONFIG_PATH=/usr/local/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH

注意:如果在 lib 目錄下找不到 pkgconfig,說明 cmake 配置時沒有開啟 OPENCV_GENERATE_PKGCONFIG,opencv4.x 默認關閉該選項,需要手動開啟。

更新生效

source /etc/bash.bashrc

驗證

pkg-config --modversion opencv4

輸出版本號?

3.4 配置動態鏈接庫

創建配置文件

sudo vim /etc/ld.so.conf.d/opencv.conf

添加如下內容,注意前綴路徑要與 cmake 編譯選項中的 CMAKE_INSTALL_PREFIX 的路徑設置保持一致

/usr/local/lib/opencv4

更新文件使其生效

sudo ldconfig
3.5 測試demo

對官方提供的測試 demo 稍作修改,輸出一張圖片

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include <iostream>using namespace cv;
using namespace std;void drawText(Mat & image);int main()
{cout << "Built with OpenCV " << CV_VERSION << endl;Mat image;cout << "No capture" << endl;image = Mat::zeros(480, 640, CV_8UC1);drawText(image);imshow("Sample", image);waitKey(0);return 0;
}void drawText(Mat & image)
{putText(image, "Hello OpenCV",Point(20, 50),FONT_HERSHEY_COMPLEX, 1, // font face and scaleScalar(255, 255, 255), // white1, LINE_AA); // line thickness and type
}

編譯,運行

g++ example.cpp $(pkg-config --cflags --libs opencv) -o test
./test

輸出圖片

到這一步 opencv 就可以正常使用了。?

三、VSCode 加載 opencv

使用VSCode打開程序時會顯示找不到 opencv

Ctrl+Shift+P,選擇 C/C++: 編輯配置(UI),此時會在當前項目的 .vscode 文件夾中生成c_cpp_properties.json 文件,在 includePath 中添加 opencv 頭文件所在位置

此時紅色波浪線消失,可以正確加載 opencv了。?

四、總結

????????本文主要記錄一下如何編譯安裝opencv并用VSCode調用,主要的坑還是在編譯部分,如果編譯沒有問題后面就比較順了。

參考資料?

[1]??#include <opencv2/opencv.hpp>報錯沒有該文件夾,linux上面安裝opencv-CSDN博客

[2]?詳盡指南:在 Ubuntu 20.04 中源碼編譯安裝 OpenCV 并進行全面配置,包括多版本共存與切換_ubuntu 20.04 編譯opencv-CSDN博客?[3]?為什么OpenCV4 “pkg-config --modversion opencv”顯示“ No package ‘opencv‘ found”?解決方法!_no package 'opencv' found-CSDN博客

[4]?解決opencv在vs code中頭文件找不到的問題_vscode opencv 找不到頭文件-CSDN博客?

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

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

相關文章

Ubuntu 安裝 HAProxy

HAProxy 是什么 HAProxy&#xff08;High Availability Proxy&#xff09; 是一個 高性能、高可用的 TCP 和 HTTP 負載均衡器與代理服務器。 HAProxy 的特點 特性說明支持協議HTTP、HTTPS、TCP高性能使用 C 語言編寫&#xff0c;性能極高高可用與 Keepalived 配合可實現主備健…

Mysql--基礎知識點--91.2--processlist

在 MySQL 中&#xff0c;SHOW PROCESSLIST 是一個常用命令&#xff0c;用于查看當前數據庫服務器上所有正在運行的線程&#xff08;進程&#xff09;信息。以下是關鍵點說明&#xff1a; 1. 命令用法 SHOW FULL PROCESSLIST;輸出字段&#xff1a; 列名含義Id線程唯一標識符&am…

Git標簽刪除腳本解析與實踐:輕松管理本地與遠程標簽

Git 標簽刪除腳本解析與實踐:輕松管理本地與遠程標簽 在 Git 版本控制系統中,標簽常用于標記重要的版本節點,方便追溯和管理項目的不同階段。隨著項目的推進,一些舊標簽可能不再需要,此時就需要對它們進行清理。本文將通過一個完整的腳本,詳細介紹如何刪除本地和遠程的 …

K8S - Harbor 鏡像倉庫部署與 GitLab CI 集成實戰

引言 在 Kubernetes 環境中&#xff0c;容器鏡像的存儲與管理至關重要。企業級鏡像倉庫&#xff08;如 Harbor&#xff09;為團隊提供了安全、穩定、可擴展的鏡像管理解決方案。 一、Harbor 安裝與配置 Harbor 是由 VMware 開源的企業級云原生鏡像倉庫&#xff0c;它不僅支持…

2025年best好用的3dsmax插件和腳本

copitor 可以從一個3dsmax場景里將物體直接復制到另一個場景中 Move to surface 這個插件可以將一些物體放到一個平面上 instancer 實體器&#xff0c;舉例&#xff1a;場景中有若干獨立的光源&#xff0c;不是實體對象&#xff0c;我們可以使用instancer將他變成實體。 paste …

Python爬蟲實戰:研究nodejs aes加密

1. 引言 1.1 研究背景與意義 在當今數字化時代,Web 數據的價值日益凸顯。通過爬蟲技術獲取公開數據并進行分析,能夠為企業決策、學術研究等提供有力支持。然而,為了保護數據安全和隱私,許多網站采用了加密技術對數據進行保護,其中 AES 加密是一種常見且安全的加密算法。…

LGDRL:基于大型語言模型的深度強化學習在自動駕駛決策中的應用

《Large Language Model guided Deep Reinforcement Learning for Decision Making in Autonomous Driving》2024年12月發表&#xff0c;來自北理工的論文。 深度強化學習&#xff08;DRL&#xff09;在自動駕駛決策方面顯示出巨大的潛力。然而&#xff0c;由于DRL的學習效率低…

TDEngine 與 Grafana

目錄 實踐目錄 Grafana 參考文檔 實踐目錄 10.60.100.194&#xff1a;/home/dualven/tdengine Grafana systemctl status grafana-server http://10.60.100.194:3000/ 這個端口與mydoor的new server服務沖突 &#xff08;同時只開一個&#xff09; 參考文檔 運行監…

Edge瀏覽器打開PDF文件顯示空白(每次需要等上一會)

概述 部分pdf文件用edge瀏覽器打開顯示空白&#xff0c;需要等一會才能顯示出來&#xff0c;這很讓人難以接受&#xff0c;用其他瀏覽器和pdf閱讀器打開是正常的&#xff0c;該怎么操作解決&#xff0c;卸載重裝&#xff0c;修復&#xff0c;重置瀏覽器等都無效。 解決辦法 可…

uniapp小程序輪播圖高度自適應優化詳解

在微信小程序開發過程中&#xff0c;輪播圖組件(swiper)是常用的UI元素&#xff0c;但在實際應用中經常遇到高度不匹配導致的空白問題。本文詳細記錄了一次輪播圖高度優化的完整過程&#xff0c;特別是針對固定寬高比圖片的精確適配方案。 問題背景 在開發"零工市場&quo…

Android第三次面試總結之網絡篇補充

一、網絡模型&#xff1a;OSI 七層 vs TCP/IP 四層&#xff08;必考點&#xff09; 1. 分層模型對比 OSI 七層模型TCP/IP 四層模型核心功能Android 相關場景應用層&#xff08;7 層&#xff09;應用層定義數據格式&#xff08;HTTP/HTTPS/FTP/API&#xff09;OkHttp/Retrofit…

postgresql主從集群一鍵搭建腳本分享

腳本1&#xff1a; cat pg_ms_install.sh #!/bin/bash # 基礎環境配置&#xff08;保持不變&#xff09; setenforce 0 >/dev/null 2>&1 || true sed -i "s/SELINUXenforcing/SELINUXdisabled/" /etc/selinux/config systemctl stop firewalld >/dev/n…

LWIP的ICMP協議

ICMP協議簡介 ICMP協議是一個網絡層協議 背景&#xff1a;如果丟包了&#xff0c;IP協議并不能通知傳輸層是否丟包以及丟包的原因。因此我們需要ICMP協議來完成這樣的功能 為什么需要ICMP協議 1&#xff0c;IP 協議本身不提供差錯報告和差錯控制機制來保證數據報遞交的有效…

具身智能機器人開源陪跑計劃(機器人實戰落地)

Who&#xff1a;我們是誰&#xff1f; 主理人背景 華南理工大學碩士畢業&#xff0c;10年機器人研發經驗&#xff0c;5年“互聯網機器人”創業經歷 累計牽頭落地的機器人30多款&#xff0c;累計授權專利80余項&#xff0c;累計論文發表10余篇。 技術履歷 C#、Sql server、SPSS…

Dify 配置網絡爬蟲為知識庫數據來源 (以Jina Reader為例) - 隨筆

API獲取 進入官網獲取免費的API密鑰 官網鏈接&#xff1a;https://jina.ai/reader/ 點擊“<> API”按鈕 點擊復制文本框中的API Key&#xff1a; 進入Dify的知識庫頁面 → 選擇“同步自Web站點” → 選擇“Jina Reader” → 點擊“配置”按鈕 選擇數據來源為Jina …

基于網絡爬蟲+Spark+Hadoop等大數據和SpringBoot技術實現的的汽車行業大數據分析與可視化平臺系統(源碼+論文+PPT+部署文檔教程等)

博主介紹&#xff1a;CSDN畢設輔導第一人、全網粉絲50W,csdn特邀作者、博客專家、騰訊云社區合作講師、CSDN新星計劃導師、Java領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和學生畢業項目實戰,高校老師/講師/同行前輩交流? 技術范圍…

React學習路線圖-Gemini版

前端開發學習路線圖 (針對編程新手&#xff0c;主攻 React 框架) 總原則&#xff1a;先打好地基&#xff0c;再蓋樓。 無論學習哪個框架&#xff0c;扎實的 HTML、CSS 和 JavaScript 基礎是成功的關鍵。React 是基于 JavaScript 構建的&#xff0c;所以深入理解 JS 至關重要。…

空間計算:開啟人機交互新紀元的下一代技術范式

引言 當蘋果CEO蒂姆庫克在2023年WWDC大會上宣布Apple Vision Pro將引領“空間計算時代”時&#xff0c;這一宣言不僅標志著技術范式的迭代&#xff0c;更預示著一場融合虛實世界的革命已悄然來臨。 空間計算&#xff08;Spatial Computing&#xff09;作為連接物理世界與數字…

大語言模型訓練的兩個階段

先說結論&#xff1a;第一階段在云平臺訓練至收斂 第二階段本地GPU微調 一、階段劃分的核心邏輯 階段目標資源特點典型耗時占比成本敏感度預訓練獲取通用表征能力需要大規模分布式計算70-90%高&#xff08;追求每美元算力&#xff09;微調適配特定任務需要領域數據安全/低延遲…

【AI News | 20250512】每日AI進展

AI Repos 1、UI-TARS UI-TARS-1.5 是字節跳動開源的多模態智能體&#xff0c;基于強大的視覺語言模型構建&#xff0c;通過強化學習實現高級推理&#xff0c;顯著提升了在虛擬世界中執行多樣化任務的能力和適應性。相較前期模型&#xff0c;1.5 版本在 OSWorld、Windows Agent…