31
Raspberry Pi 研習營 CAVE Education 徐豐智 E - mail:jesusvictory777@cavedu,com 1

[4]投影片 futurewad樹莓派研習會 141211

Embed Size (px)

Citation preview

Raspberry Pi 研習營

CAVE Education

徐豐智

E-mail:jesusvictory777@cavedu,com

1

Session 5: 用視覺程式庫偵測彩色物件

2

OpenCV

• 環境設定

• 更多簡單的範例–讀圖&高斯模糊

–開啟攝影機

• OpenCV專案–影像差異

–歷史移動影像

–背景相減

–人臉偵測

關於OpenCV

• OpenCV(開放原始碼之電腦視覺)主要是針對在及時計算機視覺庫的一種編程功能。– 人機介面(HCI)– 物體識別– 切割辨識– 人臉辨識– 手勢辨識– 移動偵測– 動作認知– 場景重構(Structure From Motion)– 立體聲和多台攝影機校準及深度計算– 移動機器人.

首先準備

• 裝備視覺函式庫opencv

• 包含opencv函式庫的Rpi主程式

– Raspbian openCV img檔下載

• 裝備攝影機webcam

–確認安裝資料夾

– $cd /dev

– $ls

–尋找video05

自行安裝視覺函式庫

• 已燒錄rpiopencv.img的SD卡,請跳過此頁

– $sudo apt-get update

• 安裝轉譯程式

– $sudo apt-get install build-essential

• 聲音與影像的編碼和解碼

– $sudo apt-get install libavformat

• 聲音與影像的轉碼

– $sudo apt-get install ffmpeg

6

自行安裝視覺函式庫

• 已燒錄rpiopencv.img的SD卡,請跳過此頁

• Opencv基本函式庫

– $sudo apt-get install libcv2.3 libcvaux2.3 libhighgui2.3

• Opencv-python版套件

– $sudo apt-get install python-opencv

• Opencv技術文件

– $sudo apt-get install opencv-doc

7

自行安裝視覺函式庫

• 已燒錄rpiopencv.img的SD卡,請跳過此頁

• 顯示更多用來編譯opencv的開發工具

– $sudo apt-get install libcvaux-dev

• 顯示opencv標頭檔和靜態資料庫

– $sudo apt-get install libcv-dev

• 另一個顯示opencv標頭檔和靜態資料庫

– $sudo apt-get install libhighgui-dev

8

Opencv開啟攝影機

• Rpi檔案路徑:sudo python camera.py

– /home/pi/opencv2.4.9/samples/python/camera.py

9

camera.py

• import cv2.cv as cv:匯入opencv資料庫

• import time:匯入時間資料庫

• 1、cv.NamedWindow(“camera”, 1):建立一個展示畫面的視窗

• 2、capture = cv.CaptureFromCAM(0):建立攝影機與畫面的結構

• 3、cv.SetCaptureProperty(capture, 3, 360):設定畫面寬度

• 4、cv.SetCaptureProperty(capture, 4, 240):設定高度

10

camera.py

• while True: #建立顯示畫面的迴圈

• img = cv.QueryFrame(capture)#捕捉畫面並儲存於img

• cv.ShowImage(“camera”, img)#將img定位於視窗

• if cv.WaitKey(10) == 27#按下ESC鍵結束

• break

• cv.DestroyAllWindows()

11

偵測彩色物件

• camera2.py,或在camrea.py增加指令

12

camera2.py(從camera.py修改)

13

14

camera2.py

• cv.Smooth(img,img,cv.CV_BLUR,3)#將圖像平滑化,去除較大的偏差

• hue_img = cv.CreateImage(cv.GetSize(img), 8, 3)#產生一個預設畫面,可以保存下面程式的色調

• cv.CvtColor(img,hue_img, cv.CV_BGR2HSV)#儲存色度、彩度、亮度畫面

• threshold_img = cv.CreateImage(cv.GetSize(hue_img), 8, 1)#再建立一個黑白畫面、將非特定顏色設為黑色

15

camera2.py

• cv.InRangeS(hue_img, (38,120,60),(75, 255, 255), threshold_img)

– #將(38,120,60),(75, 255, 255)為特定顏色的彩色範圍

– #Python: cv.InRangeS(src, lower, upper, dst)

16

圖像平滑化演算

• CV_BLUR_NO_SCALE

• CV_BLUR

• CV_GAUSSIAN

• CV_MEDIAN

17

平滑化是什麼?

• 原圖 使用濾鏡

18

平滑化是什麼?

• 銳利化的結果比較

19

平滑化是什麼?

• SIZE是什麼?

20

高斯矩陣範例

21

中值濾波器

22

HSL與HSV色彩空間(wiki)

• HSL

• Hue,Saturation,Lightness

• HSV、HSB

• Hue, Saturation, Value

• Hue, Saturation, Brightness

23

HSL與HSV色彩空間(wiki)

24

HSL與HSV色彩空間(wiki)

25

• 使用色度偵測色彩教學:

• http://www.shervinemami.info/colorConversion.html

• 查詢RGB、HSV、HEX數值

• http://www.colorspire.com/

26

在周圍畫上綠色框線

• 下載camera3.py,或在camrea2.py修改

• 網址:

– https://sites.google.com/a/cavedu.com/www/file

27

camera3.py(修改camera2.py)

28

camera3.py(程式碼)

29

camera3.py

• storage = cv.CreateMemStorage(0)

• #建立操控畫面的記憶體空間

• contour = cv.FindContours(threshold_img, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE)

• #尋找在臨界門檻值內的區塊

• points = [] #建立保存不同色點的陣列

• while contour: #檢查所有迴圈內的輪廓

• rect = cv.BoundingRect(list(contour))

• #對彩色區塊建立一個封閉的長方形

30

camera3.py

• contour = contour.h_next() #為下一個輪廓準備

• size = (rect[2]*rect[3])

• #計算長方形的面積

• if size>100: #大小大於100像素

• pt1=(rect[0],rect[1])

• #長方形左側X、Y座標

• pt2=(rect[0]+rect[2],rect[1]+rect[3])

• cv.Rectangle(img, pt1, pt2, (38, 160 ,60))

• #在指定的位置上畫一個長方形

31