接觸圖像領域的應該對于opencv都不會感到陌生,這個應該算是功能十分強勁的一個算法庫了,當然了,使用起來也是很方便的,之前使用Windows7的時候出現多該庫難以安裝成功的情況,現在這個問題就不存在了,需要安裝包的話可以去我的資源中下載使用,使用pip安裝方式十分地便捷。
今天主要是基于opencv模塊來調用筆記本的內置攝像頭,然后從視頻流中獲取到人臉的圖像數據用于之后的人臉識別項目,也就是為了構建可用的數據集。整個實現過程并不復雜,具體如下:
#!usr/bin/env python#encoding:utf-8'''__Author__:沂水寒城功能: Python opencv調用攝像頭獲取個人圖片使用方法:    啟動攝像頭后需要借助鍵盤輸入操作來完成圖片的獲取工作    c(change): 生成存儲目錄    p(photo): 執行截圖    q(quit): 退出拍攝OpenCV簡介1、videoCapture()方法打開攝像  攝像頭變量 cv2.VideoCapture(n)  n為整數內置攝像頭為0,若有其他攝像頭則依次為1,2,3,...  cap=cv2.VideoCapture(0) 打開內置攝像頭2、cap.isOpened()方法判斷攝像頭是否處于打開,返回結果為:True、False3、ret,img=cap.read() 讀取圖像  布爾變量,圖像變量=cap.read() 4、cap.release() 釋放攝像頭5、action=cv2.waitKey(n) 獲取用戶輸入,同時可獲取按鍵的ASCLL碼值'''import osimport cv2import sysreload(sys)sys.setdefaultencoding('utf-8')def cameraAutoForPictures(saveDir='data/'):  '''  調用電腦攝像頭來自動獲取圖片  '''  if not os.path.exists(saveDir):    os.makedirs(saveDir)  count=1 #圖片計數索引  cap=cv2.VideoCapture(0)  width,height,w=640,480,360  cap.set(cv2.CAP_PROP_FRAME_WIDTH,width)  cap.set(cv2.CAP_PROP_FRAME_HEIGHT,height)  crop_w_start=(width-w)//2  crop_h_start=(height-w)//2  print 'width: ',width  print 'height: ',height  while True:    ret,frame=cap.read() #獲取相框    frame=frame[crop_h_start:crop_h_start+w,crop_w_start:crop_w_start+w] #展示相框    frame=cv2.flip(frame,1,dst=None) #前置攝像頭獲取的畫面是非鏡面的,即左手會出現在畫面的右側,此處使用flip進行水平鏡像處理    cv2.imshow("capture", frame)    action=cv2.waitKey(1) & 0xFF    if action==ord('c'):      saveDir=raw_input(u"請輸入新的存儲目錄:")      if not os.path.exists(saveDir):        os.makedirs(saveDir)    elif action==ord('p'):      cv2.imwrite("%s/%d.jpg" % (saveDir,count),cv2.resize(frame, (224, 224),interpolation=cv2.INTER_AREA))      print(u"%s: %d 張圖片" % (saveDir,count))      count+=1    if action==ord('q'):      break  cap.release() #釋放攝像頭  cv2.destroyAllWindows() #丟棄窗口if __name__=='__main__':    cameraAutoForPictures(saveDir='data/')上述代碼的運行環境需要是Python2,因為python2中才有reload方法,去掉那些語句就可以在Python3中執行了,我們在Python2的環境中執行結果截圖如下:
新聞熱點
疑難解答