在 Ubuntu 下寫第一支 OpenCV 程式

本篇 ShengYu 來介紹如何在 Ubuntu 下用 C/C++ 寫第一支 OpenCV 的程式,並且最後透過 g++ 指令編譯與執行起來。

第一支 OpenCV 讀取圖片並顯示程式範例說明

第一支 OpenCV 程式就示範如何讀取圖片,並且把圖片顯示出來吧!範例如下,

opencv-read-picture.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 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);

namedWindow("view", WINDOW_AUTOSIZE);
imshow("view", image);

waitKey(0);

return 0;
}

在這個範例裡,我們要使用的圖片就是大名鼎鼎的 lena 小姐,
透過 cv::imread 函式將圖片讀取到一個 cv::Mat 裡存放,
再使用 cv::imshow 把這張圖片給顯示出來,最後加上 cv::waitKey 讓程式等待鍵盤輸入才結束程式。

補充說明:
cv::namedWindow 是宣告一個視窗,視窗名稱叫做 view
cv::waitKey 帶入的參數表示程式需要等待 n 毫秒,如果過了 n 毫秒什麼按鍵也沒發生,就會繼續往下執行,帶入 0 表示無限等待。

使用 g++ 指令編譯

使用 g++ 編譯 OpenCV 程式時,g++ 加上 -o 選項是指定輸出的檔名,也就是執行檔的名城,沒有指定的話預設是 a.out,另外這邊還需要帶入 OpenCV header 檔的位置以及最後要連結哪些函式庫,
這邊使用 pkg-config 來方便地取得這些參數,詳細的說明請看這篇 pkg-config 章節

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

執行程式與顯示圖片

執行下列指令就可以將 read-picture 執行檔執行起來,

1
./read-picture

另外還需要 lena.jpg 這張圖片,lena.jpg 這張圖片可以在 opencv/samples/data/lena.jpg 下目錄找到,
或者可以從這裡下載,
下圖為最後看到的畫面。

以上就是第一支 OpenCV 程式,接下來看 OpenCV 怎麼寫彩色轉灰階的程式。

OpenCV 圖片彩色轉灰階

OpenCV 圖片彩色轉灰階的範例如下,分為兩種方式,第一種是 imread 讀取彩色圖片進來後利用 cvtColor 將 彩色轉換成灰階,第二種方式則是直接用 imread 將讀片讀取成灰階圖片進來,

opencv-rgb-to-gray.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// g++ opencv-rgb-to-gray.cpp `pkg-config --cflags --libs opencv`
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
Mat image;
Mat gray;
// method 1
image = imread("lena.jpg", IMREAD_COLOR);
cvtColor(image, gray, COLOR_BGR2GRAY);
// method 2
//gray = imread("lena.jpg", IMREAD_GRAYSCALE);

imshow("Input", image);
imshow("Result", gray);

waitKey(0);

return 0;
}

編譯與執行指令如下,

1
2
$ g++ opencv-rgb-to-gray.cpp `pkg-config --cflags --libs opencv`
$ ./a.out

執行結果畫面如下,

接下來我們來看看怎麼用 OpenCV 寫入圖片。

OpenCV 寫入圖片

OpenCV 寫入圖片的範例如下,承上例我們將讀取進來的圖片經過 cvtColor 轉換成灰階圖片後,最後再用 imwrite 將這張灰階圖片寫入儲存下來。

opencv-write-picture.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// g++ opencv-write-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);

Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
imshow("view", gray);
imwrite("output.jpg", gray);

waitKey(0);

return 0;
}

編譯與執行指令如下,

1
2
$ g++ opencv-write-picture.cpp -o write-picture `pkg-config --cflags --libs opencv`
$ ./write-picture

今天就這樣了,往後會在陸續介紹其他常用範例。

以上就是在 Ubuntu 下寫第一支 OpenCV 程式介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

相關主題
在 Ubuntu 下編譯安裝 OpenCV 4.1.1
在 Ubuntu 下編譯安裝 OpenCV 3.4.7
使用 gcc / g++ 編譯 opencv 程式