這篇文章利用之前所介紹的OPENCV基礎方法來做一個可以追蹤顏色物件的範例。
首先我用3D印表機列印一個綠色的小物件,然後用筆電的內建webcam 抓取即時影像透過OPENCV的處裡來追蹤這個綠色物件的位置。然後可以畫出他移動的軌跡。接著利用這個特點把它應用在經典遊戲打磚塊擋板的控制,當該綠色物件往右移時打磚塊裡的擋板也會跟著往右移,往左移也跟著往左移,提供一種不需透過鍵盤或滑鼠就可以隔空操作擋板的方式,增加遊戲的樂趣。實際操作請觀看底下影片連結。
主要處理步驟如下
1.開啟Web camera 擷取影像
_, frame = cap.read()
2. 高斯模糊
frame = cv2.GaussianBlur(frame,(77,77),0)
3.從BGR轉成HSV 色域
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
4.設定擷取綠色物件範圍
lower_green = np.array([60,50,50])
upper_green = np.array([80,255,255])
mask = cv2.inRange(hsv, lower_green, upper_green)
5.利用找出的mask 跟原圖做 Bitwise-AND
res = cv2.bitwise_and(frame,frame, mask= mask)
6.找出輪廓
cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
7.找出輪廓之後便可以找出其質心或是面積周長
M = cv2.moments(cnt)
<圖一>追蹤物件並劃出軌跡
<圖二>應用在打磚塊遊戲,擋板位置會跟著綠色物件X軸位置而移動
<Demo 影片>
<追蹤物件範例程式>
<打磚塊範例程式>
https://github.com/Ashing00/opencv_brick_game/tree/master
https://www.facebook.com/arbu00/
<其他有關OPENCV 文章>
機器學習(2)--使用OPENCV SVM實作手寫辨識
機器學習(1)--使用OPENCV KNN實作手寫辨識
OPENCV(11)--contours and convex hull(輪廓與凸包)
OPENCV(10)--Canny Edge Detection(Canny邊緣檢測)
OPENCV(9)--Image Gradients(圖像梯度)
OPENCV(8)--Histogram & Histograms Equalization(長條圖與長條圖均衡化)
OPENCV(7)--2D Convolution ,Image Filtering and Blurring (旋積,濾波與模糊)
OPENCV(6)--Trackbar(軌道桿)
OPENCV(5)--Drawing
OPENCV(4)--Grayscale,Binarization,Threshole(灰階化,二值化,閥值)
OPENCV(3)--Matplotlib pyplot bassic function
OPENCV(2)--Capture Video from Camera
OPENCV(1 )--How to install OPENCV in Python
<其他文章>
人工神經網路(2)--使用Python實作後向傳遞神經網路演算法(Backprogation artificial neature network)
人工神經網路(1)--使用Python實作perceptron(感知器)
<參考資料:>OPENCV官網
http://docs.opencv.org/3.1.0/index.html