這裡介紹如何在 Ubuntu Linux 中安裝 OpenCV 影像處理與電腦視覺函式庫,並且使用 C/C++ 或 Python 開發 OpenCV 的影像處理與電腦視覺應用程式。
在 Ubuntu Linux 我們可以使用 apt 安裝套件庫中已經編譯好的 OpenCV 函式庫:
sudo apt-get install libopencv-dev python-opencv
libopencv-dev
是 C/C++ 的函式庫,而 python-opencv
則是 Python 的函式庫,可依自己的需求增減。
在 Ubuntu Linux 套件庫中的 OpenCV 版本通常不是最新的,如果需要安裝最新的 OpenCV 版本,可以依照 OpenCV 官方的編譯安裝步驟來安裝,不過對於初學者來說,使用 apt 安裝應該就足夠了。
安裝好 OpenCV 之後首先來看一個 C++ 的 hello world 程式碼 DisplayImage.cpp
:
#include <stdio.h> #include <opencv2/opencv.hpp> using namespace cv; int main(int argc, char* argv[]) { // 檢查是否有指定輸入影像檔案 if ( argc != 2 ) { printf("usage: DisplayImage.out <Image_Path>n"); return -1; } // 讀取影像檔案 Mat image; image = imread( argv[1], 1 ); // 檢查影像是否正確讀入 if ( !image.data ) { printf("No image data n"); return -1; } // 建立視窗 namedWindow("Display Image", WINDOW_AUTOSIZE); // 用視窗顯示影像 imshow("Display Image", image); // 顯示視窗,直到任何鍵盤輸入後才離開 waitKey(0); return 0; }
若用 C++ 開發 OpenCV 的程式,官方是建議搭配 CMake 來編譯,而 CMake 的 CMakeLists.txt
設定檔內容如下:
cmake_minimum_required(VERSION 2.8) project( DisplayImage ) find_package( OpenCV REQUIRED ) add_executable( DisplayImage DisplayImage.cpp ) target_link_libraries( DisplayImage ${OpenCV_LIBS} )
在原始碼的目錄中執行以下指令進行編譯:
cmake . make
編譯完成後,會產生 DisplayImage
這個執行檔,執行時要指定一個圖檔:
./DisplayImage lena.jpg
執行之後,就會建立一個 GUI 視窗,顯示指定的圖檔。
這是 OpenCV Python 版本的 hello world 程式碼,原則上 Python 與 C++ 的 OpenCV 函數都有一對一的對應,所以程式碼看起來大同小異:
#-*- coding: utf-8 -*- import cv2 import sys # 檢查是否有指定輸入影像檔案 if (len(sys.argv) != 2): print("usage: " + sys.argv[0] + " <Image_Path>n") sys.exit(-1); # 讀取影像檔案 img = cv2.imread(sys.argv[1], cv2.IMREAD_COLOR) # 建立視窗 cv2.namedWindow("Display Image", cv2.WINDOW_AUTOSIZE); # 用視窗顯示影像 cv2.imshow('Display Image', img) # 顯示視窗,直到任何鍵盤輸入後才離開 cv2.waitKey(0)
假設這個 Python 指令稿的檔名為 display_image.py
,以 python
執行這個 Python 的指令稿:
python display_image.py lena.jpg
執行畫面也跟 C++ 的版本一樣。
在 Python 中我們也可以使用 Matplotlib 來顯示圖片,Matplotlib 所提供的 GUI 圖形介面有比較多的功能:
#-*- coding: utf-8 -*- import cv2 import sys from matplotlib import pyplot as plt # 檢查是否有指定輸入影像檔案 if (len(sys.argv) != 2): print("usage: " + sys.argv[0] + " <Image_Path>n") sys.exit(-1); # 讀取影像檔案 img = cv2.imread(sys.argv[1], cv2.IMREAD_COLOR) # 關閉 Matplotlib 的座標軸 plt.axis("off") # 以 Matplotlib 視窗顯示影像 plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show()
由於 OpenCV 的 RGB 影像儲存格式與 NumPy 不同,OpenCV 的三種顏色順序是 BGR,在使用 Matplotlib 顯示影像之前,要先轉換為 RGB,否則圖片的顏色在顯示時就會出錯。
以下是使用 Matplotlib 顯示 OpenCV 圖片的畫面:
參考資料:Manuel Ignacio López Quintero、OpenCV documentation、OpenCV-Python Docs、pyimagesearch