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"改為你存放照片的地址.