OpenCV (Open Source Computer Vision) 是一套實時影像程式庫, 這裡希望利用 Python3 來進行應用程式開發.
安裝
Windows
可以直接從 https://github.com/chiamingyen/kmol2016 git clone 可攜系統.
測試程式:
import numpy as np
import cv2
# 建立一個黑色背景
img = np.zeros((512,512,3), np.uint8)
# 以寬度 5 px 畫一條藍色的對角線
img = cv2.line(img,(0,0),(511,511),(255,0,0),5)
# 呈現此影像
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
# 載入 jpg 圖檔
image = cv2.imread("mario.jpg", flags=cv2.IMREAD_COLOR)
# 然後呈現此影像
cv2.imshow('image',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
在 Windows 環境執行結果:

Ubuntu 14.04
在 Ubuntu 操作系統中 for Python2 與 Python3 的 OpenCV 程式庫編譯流程如下:
# apt-get 更新
$ sudo apt-get update
# apt-get 升級
$ sudo apt-get upgrade
# 安裝所需的開發套件
$ sudo apt-get install build-essential cmake git pkg-config
# 安裝編譯過程所需的程式庫
$ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev
# 安裝編譯過程所需的程式庫
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
# 安裝編譯過程所需的程式庫
$ sudo apt-get install libgtk2.0-dev
# 安裝編譯過程所需的 fortran 編譯器
$ sudo apt-get install libatlas-base-dev gfortran
# 安裝編譯過程所需的原始碼
$ sudo apt-get install python3.4-dev
# 本台機器的 python 為 2.7 版, 而 python3 則為 python 3.4, 這裡安裝 numpy 模組
$ pip3 install numpy
# 希望在帳號目錄下的 tmp 進行編譯工作
$ cd
# 更換目錄到 tmp
$ cd tmp
# 利用 git clone 取得原始碼
$ git clone https://github.com/Itseez/opencv.git
# 準備進入倉儲切換分支
$ cd opencv
# 採用 3.1.0 版
$ git checkout 3.1.0
# 回到用戶目錄
$ cd ..
# 再利用 git clone 下載原始碼
$ git clone https://github.com/Itseez/opencv_contrib.git
# 準備進入倉儲切換分支
$ cd opencv_contrib
# 與 opencv 配合, 採用 3.1.0 版
$ git checkout 3.1.0
$ cd ..
# 準備開始建立程式庫
$ cd opencv
$ mkdir build
$ cd build
# 這裡會同時建立 Python2 與 Python3 的 OpenCV 程式庫檔案
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D PYTHON_EXECUTABLE=$(which python3) \
-D OPENCV_EXTRA_MODULES_PATH= ./../../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..
$ make -j4
$ sudo make install
$ sudo ldconfig
完成安裝後, 執行上一個測試程式結果:

以下則為人臉變識程式:https://github.com/shantnu/FaceDetect/:
執行需要取得 haarcascade_frontalface_default.xml
import cv2
import sys
cascPath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascPath)
video_capture = cv2.VideoCapture(0)
while True:
# 逐一以影格取像
ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags=cv2.CASCADE_SCALE_IMAGE
)
# 在辨識的臉形外圍畫一個矩形
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 呈現影像
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 停止執行
video_capture.release()
cv2.destroyAllWindows()
人臉辨識程式執行結果:

Comments
comments powered by Disqus