1.外置摄像头的调用
cap = cv.VideoCapture(700)
这个地方的700就是摄像头的id号
对于内置摄像头而言,摄像头的id就是0,使用代码cap = cv.VideoCapture(0)
就可以
外置摄像头由于不知道摄像头的id,但是我们可以试一试
import cv2 as cv
import time
for i in range(0,50000):
cap = cv.VideoCapture(i)
ret, img = cap.read()
if ret:
print(i)
打印的效果如下,这里我们知道外置摄像头就是在700和1400中一个,我这里用700
2.启动摄像头实时展示
import numpy as np
import cv2 as cv
import time
cap = cv.VideoCapture(700)
#有的摄像头启动需要时间,这里延时100ms
time.sleep(0.1)
while cap.isOpened():
ret, img = cap.read()
cv.namedWindow("1",cv.WINDOW_NORMAL)
cv.imshow("1", img)
# 等待30ms显示图像,若过程中按“Esc”退出
if cv.waitKey(30) == ord('q'):
break
3.人脸识别
import numpy as np
import cv2 as cv
import time
cap = cv.VideoCapture(700)
time.sleep(0.1)
#告诉OpenCV使用人脸识别分类器
faceCascade = cv.CascadeClassifier(r'F:\python\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_alt2.xml')
#识别出人脸后要画的边框的颜色,RGB格式
color = (0, 255, 0)
while cap.isOpened():
ret, img = cap.read()
if not ret:
break
grey = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#scaleFactor=1.2,图片缩放比例,默认是1.1
#minNeighbors=3:匹配成功所需要的周围矩形框的数目,每一个特征匹配到的区域都是一个矩形框,只有多个矩形框同时存在的时候,才认为是匹配成功,比如人脸,这个默认值是3
#minSize:匹配物体的大小范围
faceRects = faceCascade.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(faceRects) > 0: # 大于0则检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect
cv.rectangle(img, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)
cv.namedWindow("1",cv.WINDOW_NORMAL)
cv.imshow("1", img)
# 等待1ms显示图像,若过程中按“Esc”退出
if cv.waitKey(1) == ord('q'):
break
# 释放摄像头并销毁所有窗口
cap.release()
cv.destroyAllWindows()
存在一点小问题在于faceRects = faceCascade.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
修改scaleFactor=1.4
就不会存在这个问题啦