這裡介紹如何在 Ubuntu Linux 中安裝 OpenCV 影像處理與電腦視覺函式庫,並且使用 C/C++ 或 Python 開發 OpenCV 的影像處理與電腦視覺應用程式。

安裝 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 Hello World(C++)

安裝好 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 Hello World 程式

OpenCV Hello World(Python)

這是 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++ 的版本一樣。

OpenCV Hello World 程式

在 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 圖片的畫面:

Matplotlib 顯示 OpenCV 圖片

參考資料:Manuel Ignacio López QuinteroOpenCV documentationOpenCV-Python Docspyimagesearch