1. 程式人生 > >【好玩的計算機視覺】物體跟蹤及螢幕塗鴉

【好玩的計算機視覺】物體跟蹤及螢幕塗鴉

好久沒來CSDN了,還是寫部落格的歲月更加充實。這次開個新的專欄【好玩的計算機視覺】,打算做一些從入門到進階過程中好玩的程式分享給大家,拋磚引玉。因為計算機視覺和攝像頭分不開,所以以後這個專題標配一個demo視訊。因為我喜歡B站的彈幕和沒有廣告,所以視訊都發在bilibili上,非常歡迎大家用彈幕和我交流分享點子哈:-)

這次做一個跟蹤塗鴉,就是先確定一個物體,用最小的圓跟蹤它從而獲得圓心,用這個圓心在螢幕上畫圖。使用OpenCV 3和Python 3。

1. 選取物體

我們可以用OpenCV的cv2.setMouseCallback方法使用滑鼠,點選影象中你感興趣的物體,就會在終端輸出HSV顏色值。比如我在視訊中用的乒乓球,我會盡量在乒乓球上多選取一些點,從而得知一個乒乓球HSV顏色空間的大概範圍,從而把乒乓球從背景中剝離。HSV顏色空間非別是:Hue色度, Saturation飽和度, Value明度。如下圖:


我在程式中是選取金黃色物體:

lowerYellow = np.array([14,110,150])
upperYellow = np.array([35,255,255])

在HSV顏色空間中,色度是0-360,但在OpenCV程式中,色度是0-180,所以上圖壓縮成180°的半圓柱就是對應程式中的取值範圍。然後用:
mask = cv2.inRange(hsv, lowerYellow, upperYellow)

來獲得前景物體,和背景區分開。接下來獲取邊界:
im, contours, hierarchy = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

然後用最小圓包裹住物體:

for c in contours:
      (x, y), radius = cv2.minEnclosingCircle(c)
最後就用cv2.line和cv2.circle來實時繪畫。按下“x”鍵開始追蹤選取物體最小圓的圓心並畫圖,再按一下“x”停止;按“c”鍵清除螢幕圖畫,可以接著畫了。