iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
1

本章我們來寫個不太實用,但是也不怎麼困難的小東西,結合之前寫過的小程式,我們很輕鬆就可以做到。

import dlib
import cv2
import imutils

cap = cv2.VideoCapture(0)

detector = dlib.get_frontal_face_detector()

宣告完capdetector,我們和上章一樣要寫一個迴圈,只是迴圈內部的內容會做些小變動:

while(cap.isOpened()):
  ret, frame = cap.read()

  # 將frame轉成灰階圖
  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

  face_rects = detector.run(gray, 0)

  for i, d in enumerate(face_rects):
    x1 = d.left()
    y1 = d.top()
    x2 = d.right()
    y2 = d.bottom()

  cv2.rectangle(gray, (x1, y1), (x2, y2), (0, 0, 255), 10, cv2.LINE_AA)

  result = gray[y1:y2, x1:x2]

  cv2.imshow("FaceShow",result)
  
  # 圖片存檔判斷式
  if cv2.waitKey(1) & 0xFF == ord('s'):
    cv2.imwrite('output.jpg', result)
  elif cv2.waitKey(1) & 0xFF == ord('q'):
    break

可以看到我們用cv2.cvtColor函式將攝像頭擷取到的原始圖片轉成了灰階圖片,然後將灰階圖片丟進人臉偵測器裡,而且我們進行分割的圖片是畫了矩形的灰階圖片,所以我們執行cv2.imshow印出來的結果會是一張灰階帶深色框的大頭照,同時進行動態人臉捕捉。

因為要做拍攝功能,所以在break條件的上方多加了一條判斷式:當迴圈執行途中偵測到s按鍵輸入,就會執行cv2.imwrite進行圖片存檔,達到可即時截圖的功能。

寫完上面的迴圈,別忘了在程式跳出之後節省記憶體:

cap.release()
cv2.destroyAllWindows()

上一篇
Day24-動態人臉辨識
下一篇
Day26-圖像絕對值
系列文
OpenCV 從零開始的影像處理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言