使用 gcc / g++ 編譯 opencv 程式

本篇 ShengYu 將介紹如何使用 gcc / g++ 指令來編譯 opencv 程式,並且透過 pkg-config 指令來取得 opencv 編譯所需的參數。

以下範例為簡單的讀取 lena 圖片,詳細的介紹說明請看 這篇

opencv-read-picture.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// g++ opencv-read-picture.cpp `pkg-config --cflags --libs opencv`
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
Mat image;
image = imread("lena.jpg", IMREAD_COLOR);

imshow("view", image);
waitKey(0);
return 0;
}

使用 g++ 編譯 opencv 程式

正常編譯的話通常是使用 g++ opencv-read-picture.cpp -o read-picture 就完成了,但是這邊還需要帶入 opencv 的標頭檔目錄與連結函式庫,
這邊使用 pkg-config 這個工具來輔助完成這件事,最後透過結合這兩個指令就可以編譯出執行檔,

1
g++ opencv-read-picture.cpp -o read-picture `pkg-config --cflags --libs opencv`

pkg-config 原理

使用 pkg-config --cflags opencv 指令會輸出 opencv 所需要的標頭檔目錄,
輸出如下:

1
-I/usr/local/include/opencv -I/usr/local/include

使用 pkg-config --libs opencv 指令會輸出 opencv 所需要連結的函式庫,
輸出如下(本篇使用opencv 3.4.7,使用其他版本或許輸出有些不同):

1
-L/usr/local/lib -lopencv_ml -lopencv_dnn -lopencv_highgui -lopencv_superres -lopencv_objdetect -lopencv_stitching -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_photo -lopencv_flann -lopencv_shape -lopencv_video -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core

如果結合–cflags 和 –libs 兩個一起使用的話 pkg-config --cflags --libs opencv 則會一起輸出標頭檔目錄與連結的函式庫,輸出如下(本篇使用opencv 3.4.7,使用其他版本或許輸出有些不同):

1
-I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_ml -lopencv_dnn -lopencv_highgui -lopencv_superres -lopencv_objdetect -lopencv_stitching -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_photo -lopencv_flann -lopencv_shape -lopencv_video -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core

以上就是使用 gcc / g++ 編譯 opencv 程式介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

相關主題
在 Ubuntu 下寫第一支 OpenCV 程式