python+opencv打开摄像头 人脸识别

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就不会存在这个问题啦

发布了25 篇原创文章 · 获赞 1 · 访问量 1653

猜你喜欢

转载自blog.csdn.net/weixin_43977647/article/details/100775959