Python基於opencv呼叫攝像頭獲取個人圖片

Together_CZ發表於2019-02-20

     接觸影象領域的應該對於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、False
3、ret,img=cap.read()  讀取影象
   布林變數,影象變數=cap.read()  
4、cap.release()  釋放攝像頭
5、action=cv2.waitKey(n)  獲取使用者輸入,同時可獲取按鍵的ASCLL碼值
'''


import os
import cv2
import sys
reload(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的環境中執行結果截圖如下:

           

      我的儲存路徑是data,按q退出後,進入data資料夾下就可以看到自己的“靚照”了哈,好了資料集準備到此結束,接下來準備實戰人臉識別。 

相關文章