通過學習opencv圖像庫編程借助第三方庫函數完成一個綜合程序設計
1) 編譯命令解釋:
編譯命令:
gcc test1.cpp -o test1 `pkg-config --cflags --libs opencv`
這條命令包含了以下部分:
gcc test1.cpp -o test1
:gcc
是 GNU 編譯器集合(GCC)中的 C 編譯器,用于編譯 C++ 源代碼文件(如test1.cpp
)。-o test1
選項指定了輸出的可執行文件名為test1
。
pkg-config --cflags --libs opencv
:- 這是一個命令替換部分,
pkg-config
是一個用于獲取已安裝的庫的編譯和鏈接信息的工具。通過pkg-config
,你可以獲取與 OpenCV 相關的編譯和鏈接參數。 --cflags
: 返回編譯時需要的標志(例如,包含 OpenCV 頭文件的路徑)。--libs
: 返回鏈接時需要的標志(例如,鏈接 OpenCV 庫的路徑和需要鏈接的庫)。
- 這是一個命令替換部分,
因此,pkg-config --cflags --libs opencv
會返回類似以下內容的路徑和標志:
-I/usr/include/opencv4 # 頭文件路徑
-L/usr/lib/x86_64-linux-gnu -lopencv_core -lopencv_imgproc -lopencv_highgui # 鏈接的庫路徑和庫文件
編譯命令會將這些路徑和標志添加到 GCC 命令中,確保程序能夠找到 OpenCV 的頭文件和庫文件。
2) 使用 make
和 Makefile
編譯:
創建一個 Makefile
文件,進行編譯,并添加 clean
選項來清理生成的文件。
# 變量定義
CXX = g++
CXXFLAGS = `pkg-config --cflags opencv4`
LDFLAGS = `pkg-config --libs opencv4`
SRC = test1.cpp
OUT = test1# 默認目標
all: $(OUT)# 鏈接規則
$(OUT): $(SRC)$(CXX) $(SRC) -o $(OUT) $(CXXFLAGS) $(LDFLAGS)# 清理目標
clean:rm -f $(OUT)
解釋:
CXX
:指定編譯器,使用g++
來編譯 C++ 文件。CXXFLAGS
和LDFLAGS
:這兩個變量分別通過pkg-config
獲取 OpenCV 所需的編譯標志和鏈接標志。SRC
:源代碼文件test1.cpp
。OUT
:最終生成的可執行文件名稱test1
。
使用 make
命令:
make
這將根據 Makefile
中的規則進行編譯,并生成 test1
可執行文件。
清理編譯文件:
make clean
這將刪除生成的 test1
可執行文件。
3) 使用 CMake
進行編譯:
在 CMake
中,我們通常會編寫一個 CMakeLists.txt
文件來配置項目。
創建 CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.10)
project(OpenCVTest)# 查找 OpenCV 包
find_package(OpenCV REQUIRED)# 添加可執行文件
add_executable(test1 test1.cpp)# 鏈接 OpenCV 庫
target_link_libraries(test1 ${OpenCV_LIBS})
解釋:
find_package(OpenCV REQUIRED)
:尋找并加載 OpenCV 包。add_executable(test1 test1.cpp)
:指定要生成的可執行文件及其源代碼文件。target_link_libraries(test1 ${OpenCV_LIBS})
:將 OpenCV 庫鏈接到生成的可執行文件。
使用 CMake
編譯:
-
在項目目錄下創建一個
build
目錄并進入:mkdir build cd build
-
運行
cmake
來生成構建文件:cmake ..
-
使用
make
編譯項目:make
-
運行生成的可執行文件:
./test1
以上就是使用 make
和 CMake
編譯 OpenCV 程序的過程。