视频中的人脸识别
轉載地址:
http://blog.csdn.net/wyx100/article/details/72943486
運行環境:
opencv3.1
python2.7
ubuntu
直接上代碼:
# -*- coding: utf-8 -*- import cv2 import numpy as np cv2.namedWindow("test") # cap = cv2.VideoCapture(0) #加載攝像頭錄制 cap = cv2.VideoCapture("test.mp4") #打開視頻文件 success, frame = cap.read() classifier = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml") # 確保此xml文件與該py文件在一個文件夾下,否則將這里改為絕對路徑 while success: success, frame = cap.read() size = frame.shape[:2] image = np.zeros(size, dtype=np.float16) print"image=",imageimage = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) print"image=",imagecv2.equalizeHist(image, image) #直方圖均衡化,增強圖片的對比度 divisor = 8 h, w = size #h=240,w=320minSize = (w / divisor, h / divisor) faceRects = classifier.detectMultiScale(image, 1.2, 2, cv2.CASCADE_SCALE_IMAGE, minSize) #detectMultiScale函數。它可以檢測出圖片中所有的人臉,并將人臉用vector保存各個人臉的坐標、大小(用矩形表示)print"faceRects=",faceRectsif len(faceRects) > 0: for faceRect in faceRects: x, y, w, h = faceRect#這個意思大概是找到人臉的一個坐標(x,y),w和h表示寬和高,也就是在當前的圖片中用一個方框來哦定位臉部的位置。print "x=",xprint "y=",yprint "w=",w print "h=",hprint "-"*100cv2.circle(frame, (x + w / 4, y + h / 4 + 30), min(w / 8, h / 8), (255, 0, 0)) cv2.circle(frame, (x + 3 * w / 4, y + h / 4 + 30), min(w / 8, h / 8), (255, 0, 0)) #用來定位兩個眼睛cv2.rectangle(frame, (x + 3 * w / 8, y + 3 * h / 4), (x + 5 * w / 8, y + 7 * h / 8), (255, 0, 0)) #用來定位嘴唇#其實這個代碼根本就沒有識別出眼睛和嘴唇,只不過是在限定臉在整張圖片中的范圍后,大致估計眼睛和嘴唇的位置罷了。cv2.imshow("test", frame) key = cv2.waitKey(10) ## 第一個參數: 等待x ms,如果在此期間有按鍵按下,則立即結束并返回按下按鍵的# ASCII碼,否則返回-1# 如果x=0,那么無限等待下去,直到有按鍵按下c = chr(key & 255) if c in ['q', 'Q', chr(27)]: break cv2.destroyWindow("test")總結
- 上一篇: python2.7+opencv3.1人
- 下一篇: 使用pypy初步