VsCode 上的Opencv(C++)環境配置(Linux)

1.下載Opencv

1.新建文件demo_cpp,在demo_cpp中新建third_parties文件

2.OPENCV官網下載OpenCV-4.12.0

3.將下載好的opencv-4.12.0.zip壓縮包在third_parties中解壓,

//以下均無特殊說明,均在vscode里的TERMINAL中輸入
sudo apt-get install unzip//用于解壓.zip文件
cd third_parties//切換到third_parties文件中
unzip opencv-4.12.0.zip//解壓opencv-4.12.0.zip到當前目錄
cd opencv-4.12.0//切換到opencv-4.12.0文件中

4.在解壓后的opencv-4.12.0文件中新建build文件

mkdir build//新建build文件
cd build//切換到build文件夾中

5.在TERMINAL中輸入cmake

cmake ..//使用 ../CMakeLists.txt 文件作為起始點在當前目錄中生成makefile

6.cmake成功執行后在terminal中輸入make

7.在新建demo_cpp文件中新建CMakeLists.txt配置文件

2.配置文件調用Opencv庫

編輯CMakeLists.txt配置文件

2.1 聲明 CMake 版本和項目名

  • 指定本項目中cmake最低版本.查詢cmake版本方法:使用快捷鍵(CTRL ALT T)調出終端,中輸入cmake --version.
cmake_minimum_required(VERSION 3.22.1)
  • 定義項目名稱并指定項目使用的編程語言,名字會被保存在一個叫 PROJECT_NAME 的 CMake 變量中
project(demo_cpp LANGUAGES CXX)

2.2定位庫路徑

通過set和find_package找到 OpenCV 庫的位置和配置。

  • 手動設置一個名為 OpenCV_DIR 的 CMake 變量,并將其值設置為指定的路徑.

./third_parties/opencv-4.12.0/build/ 是OpenCV_DIR這個變量被賦予的值。這是一個相對路徑,它基于運行 cmake 命令的當前目錄(通常是項目根目錄),指向一個名為 third_parties 的文件夾下的 OpenCV 都build目錄。這個很關鍵,如果沒有標準安裝Opencv到系統標準路徑,CMake無法找到他.這個指令告訴CMake,我想要的OpenCV就在這,別去其他地方找了.

set(OpenCV_DIR ./third_parties/opencv-4.12.0/build/)
  • 查找配置文件

根據OpenCV_DIR指定的路徑來尋找Opencv的配置文件(OpenCVConfig.cmake)。find_package是CMake用來尋找外部依賴包的核心指令,CMake根據OpenCV這個名字去尋找FindOpenCV.cmake或者OpenCVConfig.cmake.

REQUIRED是表示這個依賴是必須的關鍵字,如果CMake在任何路徑上都找不到OpenCV的配置文件,會報錯.如果成功找到,會定義CMake變量:OpenCV_INCLUDE_DIRS,包含了 OpenCV 所有頭文件 (.hpp) 的目錄路徑.OpenCV_LIBS包含所有需要鏈接的OpenCV庫文件名稱列表

find_package(OpenCV REQUIRED)
  • 配置編譯

通過include_directories告訴編譯器去哪里找頭文件。

將指定的目錄添加到編譯器的頭文件搜索路徑中,告訴編譯器除了標準路徑,也要到這些目錄里去找頭文件.${OpenCV_INCLUDE_DIRS}是變量引用語法。CMake 會將其替換為find_package(OpenCV)功后自動設置的變量值(即 OpenCV 頭文件的實際路徑).

如果出現報錯:fatal error: opencv2/opencv.hpp: No such file or directory,請檢查這個文件,他讓編譯器知道頭文件還可以在哪.

include_directories(${OpenCV_INCLUDE_DIRS})
  • 定義執行的文件

通過add_executable聲明要生成什么可執行文件,用什么源文件生成。

cpp.add_executable()用于創建可執行文件目標,main是目標名稱,src/main.cpp是構建這個可執行文件依賴的源文件

add_executable(main src/main.cpp)//告訴cmake生成一個main的可執行文件,他的源代碼是src/main.
  • 配置鏈接

通過target_link_libraries告訴鏈接器需要連接哪些第三方庫。

指定可執行文件在鏈接(Linking)階段需要連接哪些庫.target_link_libraries()用于將庫鏈接到指定的目標(這里是main),main是add_executable()定義的目標名稱.${OpenCV_LIBS}是變量引用,可告訴鏈接器需要接的第三方庫.

target_link_libraries(main ${OpenCV_LIBS})

運行?cmake?命令時,它就是根據這份“說明書”來生成?Makefile。隨后當你運行?make?時,編譯器 (g++) 和鏈接器 (ld) 就會根據?Makefile?中的具體指令,調用你在?CMakeLists.txt?中設置的路徑和庫,最終編譯鏈接出?main?這個可執行文件。

3.使用庫

在命令行中使用庫

1.回到根目錄下~/project/demo_cpp

2.切換到根目錄下的build中,如果沒有build,使用mkdir build新建一個.

3.輸入cmake .. ,完成后輸入make

4.選則CMake:Configure運行

4.運行可能出現的報錯

main()函數

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{auto picture1 = imread("../picture.jpeg");//讀取名稱為picture.jpeg的照片Mat graymat;cvtColor(picture1, graymat, COLOR_BGR2GRAY)//將picture變灰,數據存在graymat中imwrite("grey.jpeg", graymat);//將數據輸出為圖片,命名為grey.jpegMat image = imread("grey.jpeg");//讀取這個圖片if(image.empty()){printf("could not open or find picture");return -1;}imshow("grey.jpeg", image);//在屏幕上輸出image圖片}
  • 錯誤1:使用imshow函數時可能會發生報錯"/home/vboxuser/project/demo cpp/build/mainterminate called after throwing an instance of 'cv::Exception'what():OpenCV(4.12.0)/home/vboxuser/project/demo_cpp/third parties/opencv-4.12.0/modules/highgui/src/window.cpp:1284: error: (-2:Unspecifed error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support, If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-confg, then re-run cmake or confgure script infunction 'cvNamedWindow'"

錯誤表明OPenCV高階圖形界面功能未正常實現,通常是由于缺少GTK+等GUI庫支持導致的.

解決辦法:

第一步:在CTRL ALT T調出終端中輸入

sudo apt-get install libgtk2.0-dev pkg-config
sudo apt-get install libgtk-3-dev

第二步:進入Opencv源碼目錄的build文件夾,輸入

cmake -DWITH_GTK=ON -DWITH_GTK_2_X=ON ..
make -j$(nproc)
sudo make install
  • 錯誤2:/usr/bin/gcc -fdiagnostics-color=always -g /home/vboxuser/project/demo cpp/src/main.cpp -o /home/vboxuser/project/demo cpp/src/main;????????/home/vboxuser/project/demo cpp/src/main.cpp:1:10: fatal error: opencv2/opencv.hpp: No such file or directory

原因:運行時使用右上角的運行按鈕

解決方法:

1.安裝CMake插件

2.CTRL SHIFT P調出命令面板,輸入CMake:Configure,鼠標點擊,選則.

3.此時界面底端出現CMake Tools 插件提供的 Build、Run和debug.用這3個按鈕編譯\調試\運行程序,不要使用右上角的運行按鈕.

注:對于 CMake 管理的項目,請你忘記所有其他的運行方式,始終只使用 VS Code 底部狀態欄由 CMake Tools 插件提供的 Build、Run和 Debug按鈕來編譯、運行和調試你的程序,把右上角的那個運行按鈕忘掉,它不適用于復雜的 CMake 項目.-----阿彥社長

4.如果依然出現報錯,CTRL ALT T,在終端中輸入pkg-config --cflags opencv4,查找庫所在位置

再打開隱藏文件.vscode中的c_pp_properties.json,編輯includePath,將查找到的路徑添加進去

再添加配置"configurationProvider": "ms-vscode.cmake-tools"

  • 錯誤3:點擊debug時,會出現報錯,WARN:0@0.049] global loadsave.cpp:275 findDecoder imread ('grey.jpeg'): can't open/read file: check file path/integrity?could not open or find image[l] + Done"/usr/bin/gdb" --interpreter=mi.-tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-trnvjfx.h3c" 1>"/tmp/Microsoft-MIEngine-0ut-13qxhr52.wlf"

原因:debug時,是在build下調試的,而auto picture1 = imread("picture.jpeg");是告訴CMAKE在當前目錄尋找picture.jpeg文件.

解決方法:改為auto picture1 = imread("../picture.jpeg"),告訴Cmake去我當前所在路徑的上一個文件中尋找picture.jpeg.或者將"../picture.jpeg"改為你存放照片的地址.

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

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

相關文章

sql xml模板

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"com.example.mapper.UserMapper&quo…

docker在自定義網絡中安裝ElasticSearch和Kibana

創建自定義網絡 創建一個名為 es-net 的橋接網絡。這將作為 Elasticsearch 和 Kibana 的私有通信通道。 # 創建網絡 docker network create es-net # 查看網絡是否創建成功 docker network ls啟動 Elasticsearch 容器 安裝命令 docker run -d \--name elasticsearch \--net…

基于51單片機射頻RFID停車刷卡計時收費系統設計

1 系統功能介紹 本設計題目為 基于51單片機射頻RFID停車刷卡計時收費系統設計&#xff0c;旨在實現停車場車輛的刷卡計時和收費管理。系統通過單片機控制&#xff0c;結合 RFID 射頻識別技術、LCD1602 顯示以及蜂鳴器報警&#xff0c;實現停車時間的智能計時、累加及超時提醒功…

Netty源碼—性能優化和設計模式

1.Netty的兩大性能優化工具 (1)FastThreadLocal FastThreadLocal的作用與ThreadLocal相當&#xff0c;但比ThreadLocal更快。ThreadLocal的作用是多線程訪問同一變量時能夠通過線程本地化的方式避免多線程競爭、實現線程隔離。 Netty的FastThreadLocal重新實現了JDK的ThreadLoc…

Linux網絡設備分析

?? Linux 網絡設備驅動深入分析 本文將詳細分析 Linux 網絡設備驅動的工作原理、實現機制和代碼框架,并通過一個虛擬網卡實例展示其實現,最后介紹常用的工具和調試手段。 1?? Linux 網絡設備驅動概述 Linux 網絡設備驅動是內核中負責管理網絡硬件(如以太網卡、Wi-Fi …

計算機視覺:從 “看見” 到 “理解”,解鎖機器感知世界的密碼

早上醒來&#xff0c;你拿起手機&#xff0c;人臉識別瞬間解鎖屏幕&#xff1b;開車上班時&#xff0c;車載系統通過攝像頭實時識別車道線&#xff0c;提醒你不要偏離&#xff1b;去醫院做檢查&#xff0c;醫生用 AI 輔助的醫學影像系統快速定位肺部微小結節&#xff1b;逛超市…

深入了解linux系統—— 線程封裝

C11線程庫 C11也提供了對應的線程庫&#xff0c;在頭文件<thread>中&#xff1b;C11將其封裝成thread類&#xff0c;通過類實例化出對象&#xff0c;調用類內成員方法進行線程控制。 #include <iostream> #include <thread> #include <unistd.h> using…

安全防御-SCDN如何保護網站安全

隨著互聯網的快速發展&#xff0c;越來越多的企業依賴在線服務來運行其核心業務。與此同時&#xff0c;網絡攻擊的頻率和復雜性也在不斷增加&#xff0c;惡意流量成為許多企業頭疼的問題。為了有效地提高網站的安全性和穩定性&#xff0c;德迅云安全加速SCDN被許多用戶關注。今…

運籌優化(OR)-在機器學習(ML)浪潮中何去何從?

在如今機器學習的浪潮中&#xff0c;機器學習相關的崗位日益增多&#xff0c;而運籌優化的崗位卻相對較少。這是今年我秋招過程中看到的現象。企業越來越希望候選人不僅能建模求解&#xff0c;還能理解如何用數據驅動優化。需要我們有一個完整的技術棧。那么我們就來看看OR與ML…

GitHub Copilot 在 VS Code 上的終極中文指南:從安裝到高階玩法

GitHub Copilot 在 VS Code 上的終極中文指南&#xff1a;從安裝到高階玩法 前言 GitHub Copilot 作為 AI 編程助手&#xff0c;正在徹底改變開發者的編碼體驗。本文將針對中文開發者&#xff0c;深度解析如何在 VS Code 中高效使用 Copilot&#xff0c;涵蓋基礎設置、中文優化…

安全測試、web探測、httpx

&#x1f4a2; 簡介 httpx 是一個快速且多用途的HTTP工具包&#xff0c;允許使用retryablehttp庫運行多個探測器。它旨在通過增加線程數量來保持結果的可靠性。 功能 &#x1f92a; 發送 GET、POST、PUT、DELETE 等 HTTP 請求支持流式傳輸支持重定向支持身份驗證支持代理支持 …

CNN 中 3×3 卷積核等設計背后的底層邏輯

為什么卷積核愛用 33&#xff1f;CNN 設計 “約定俗成” 的底層邏輯 做深度學習的同學&#xff0c;對 CNN 里 33 卷積核、最大池化、BN 層這些設計肯定不陌生&#xff0c;但你有沒有想過&#xff1a;為啥卷積核總選 33&#xff1f;池化層為啥默認最大池化&#xff1f;BN 層又是…

稅務崗位職場能力解析與提升路徑規劃

稅務崗位作為企業運營的核心環節之一&#xff0c;對從業者的專業能力與綜合素質要求極高。從基礎稅務核算到戰略稅務籌劃&#xff0c;職場能力的提升需要系統化的路徑規劃。以下從核心能力、階段化提升路徑及證書價值三個維度展開分析。核心能力體系構建專業稅務能力是基礎&…

MySQL 索引:結構、對比與操作實踐指南

MySQL系列 文章目錄MySQL系列前言案例一、認識MySQL與磁盤1.1 MySQL與存儲1.2 MySQL 與磁盤交互基本單位二、 MySQL 數據交互核心&#xff1a;BufferPool 與 IO 優化機制三、索引的理解3.1 測試案例3.2 page3.3 頁目錄3.3 對比其他結構四、聚簇索引 VS 非聚簇索引五、索引操作5…

GitHub 熱榜項目 - 日榜(2025-08-24)

GitHub 熱榜項目 - 日榜(2025-08-24) 生成于&#xff1a;2025-08-24 統計摘要 共發現熱門項目&#xff1a;20 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術熱點&#xff1a;1&#xff09;AI應用爆發式創新&#xff0c;包括神經擬真伴侶&#…

純凈Win11游戲系統|24H2專業工作站版,預裝運行庫,無捆綁,開機快,游戲兼容性超強!

哈嘍&#xff0c;大家好&#xff01; 今天給大家帶來一款 Windows 11 游戲版本系統鏡像&#xff0c;軟件已放在文章末尾&#xff0c;記得獲取。 一、軟件獲取與啟動 解壓后雙擊exe即可直接運行&#xff0c;無需額外安裝。首次啟動界面簡潔&#xff0c;引導清晰。 二、系統選…

CI/CD 學習之路

目錄 簡介&#xff1a; 1、工具介紹&#xff1a; 2、搭建jenkins 1&#xff09;創建一個文件Dockerfile&#xff0c;文件無后綴&#xff0c;寫入以下代碼 2&#xff09;在Dockerfile文件所在目錄執行&#xff08;my-jenkins-android 未自定義鏡像名稱&#xff09; 3&#xf…

馬斯克宣布開源Grok 2.5:非商業許可引爭議,模型需8×40GB GPU運行,Grok 3半年后開源

昨晚&#xff0c;馬斯克在 X 平臺連續發布多條消息&#xff0c;宣布其人工智能公司 xAI 已正式開源 Grok 2.5 模型。這款模型是 xAI 在 2024 年的主力模型&#xff0c;如今完全向公眾開放。與此同時&#xff0c;馬斯克還預告了下一代模型 Grok 3 的開源計劃&#xff0c;預計將在…

DMP-Net:面向腦組織術中成像的深度語義先驗壓縮光譜重建方法|文獻速遞-深度學習人工智能醫療圖像

Title題目DMP-Net: Deep semantic prior compressed spectral reconstruction methodtowards intraoperative imaging of brain tissueDMP-Net&#xff1a;面向腦組織術中成像的深度語義先驗壓縮光譜重建方法01文獻速遞介紹腦腫瘤可分為原發性和繼發性兩類。原發性腦腫瘤多發生…

【nl2sql綜述】2025最新綜述解讀

論文地址&#xff1a;https://arxiv.org/pdf/2408.05109 解讀&#xff1a;邁向數據民主化——大型語言模型時代下的Text-to-SQL技術綜述 近期&#xff0c;一篇名為《A Survey of Text-to-SQL in the Era of LLMs》的綜述論文系統性地梳理了自然語言到SQL查詢&#xff08;Text-t…