图像处理之opencv识别图片和视频中人脸

文章目录

  • 1、opencv识别图片中单张人脸
    • 1.1、读取图片
    • 1.2、识别人脸
      • 1.2.1、下载人脸识别算法
      • 1.2.2、人脸检测
  • 2、opencv识别图片中多张人脸
    • 2.1、导入计算机视觉库opencv和人脸识别算法
    • 2.2、读入并展示图片
    • 2.3、图片灰色处理
    • 2.4、检测人脸
    • 2.5、画出人脸的范围
    • 2.6、调节显示窗口大小
    • 2.7、识别图像
  • 3、识别视频中的人脸
    • 3.1、导入人脸识别算法和视频
    • 3.2、读取视频中的数据
    • 3.3、灰色处理
    • 3.4、人脸像素检测识别
    • 3.5、圈出人脸
    • 3.6、设置视频展示频度
    • 3.7、源码汇总
  • 4、opencv识别电脑摄像头中的人脸

1、opencv识别图片中单张人脸

1.1、读取图片

  • 读取展示图片通常分为三个部分:
    • 1、读入图片
    • 2、展示图片
    • 3、完成后要释放资源
image = cv2.imread('./image.jpg')

cv2.namedWindow("camera", 0)#设置图片手动调节大小
cv2.imshow("camera", image)

cv2.waitKey(0)#设置任意键退出程序
cv2.destroyAllWindows()

图像处理之opencv识别图片和视频中人脸_第1张图片

  • cv2.namedWindow("camera", 0)用来手动调节图片窗口的大小

1.2、识别人脸

1.2.1、下载人脸识别算法

  • 自己写人脸识别的算法是不可能的,但我们可以直接到github上下载大神写好的人脸识别算法。
  • 人脸识别算法链接:https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
    图像处理之opencv识别图片和视频中人脸_第2张图片
  • 如果不能下载的话,可以把它的源代码复制下来放在.xml的文件下也可以的。

1.2.2、人脸检测

  • 人脸特征都是相似的
  • 根据人脸特征,识别人脸
import cv2
image = cv2.imread('./image.jpg')

#声明算法,给什么样的特征,识别什么样的事物:脸,眼睛等
face_detect = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
#人脸检查代码
face_zone = face_detect.detectMultiScale(image, scaleFactor=1.1, minNeighbors=5)#按1.1倍放大
print ('识别人脸的信息:',face_zone)
for x, y, w, h in face_zone:
    #绘制人脸区域
    cv2.rectangle(image, pt1=(x, y), pt2=(x+w, y+h),color=[0,0,255], thickness=2)#thickness表示线的粗细,矩形
    #绘制圆
    cv2.circle(image, center=(x+w//2, y+h//2), radius=w//2, color=[0,255,0], thickness=2)#radius表示半径
    
cv2.namedWindow("camera", 0)#设置图片手动调节大小
cv2.imshow("camera", image)

cv2.waitKey(0)#设置任意键退出程序
cv2.destroyAllWindows()

图像处理之opencv识别图片和视频中人脸_第3张图片



2、opencv识别图片中多张人脸

  • 可以将图片变成灰色图片,进行检测
  • 灰色图片和彩色图片尺寸一样
  • 人脸区域不会发生变化
  • opencv在检测人脸是只能检测正脸
  • 一张图片中,如果有多张人脸,人脸尺寸不一样,算法也可以检测到不同尺寸的人脸

2.1、导入计算机视觉库opencv和人脸识别算法

import cv2
face_detect = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')

2.2、读入并展示图片

img = cv2.imread('./NBA5.jpg')
cv2.imshow('NBA', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像处理之opencv识别图片和视频中人脸_第4张图片

2.3、图片灰色处理

#img是彩色图片
img = cv2.imread('./NBA5.jpg')
cv2.imshow('NBA', img)

#gray是黑白图片
gray = cv2.cvtColor(img, code=cv2.COLOR_BGR2GRAY)
cv2.imshow('GRAY', gray)

cv2.waitKey(0)
cv2.destroyAllWindows()

2.4、检测人脸

  • 检测的时候,我们使用的是黑白图片。单词detect是发现;查明;侦察出。
  • 可以通过调节scaleFactor,minNeighbors来控制人脸的识别率,maxSize控制人脸数值的显示大小。
face_zone = face_detect.detectMultiScale(gray, scaleFactor = 1.1, minNeighbors = 4, maxSize = (55,55))

2.5、画出人脸的范围

  • rectangle是矩形,circle是圆形,thickness是厚度
for x, y, w, h in face_zone:
    cv2.rectangle(img, pt1 = (x, y), pt2 = (x+w, y+h), color = [0,0,255], thickness=2)
    cv2.circle(img, center = (x + w//2, y + h//2), radius = w//2, color = [0,255,0], thickness = 2)

2.6、调节显示窗口大小

  • window表示显示图片的窗口,0表示可以手动调节窗口大小,也可以不用设置。
cv2.namedWindow("window", 0)#设置图片手动调节大小

2.7、识别图像

#img是彩色图片
img = cv2.imread('./NBA5.jpg')
cv2.imshow('NBA', img)
#gray是黑白图片
gray = cv2.cvtColor(img, code=cv2.COLOR_BGR2GRAY)
# cv2.imshow('GRAY', gray)

#检测的时候,我们使用的是黑白图片。单词detect是发现;查明;侦察出。
face_zone = face_detect.detectMultiScale(gray, scaleFactor = 1.1, minNeighbors = 4, maxSize = (55,55))
print (face_zone)
for x, y, w, h in face_zone:
    cv2.rectangle(img, pt1 = (x, y), pt2 = (x+w, y+h), color = [0,0,255], thickness=2)#rectangle是矩形,thickness是厚度
    cv2.circle(img, center = (x + w//2, y + h//2), radius = w//2, color = [0,255,0], thickness = 2)
cv2.imshow('NBA1', img)
cv2.waitKey(0)
cv2.destroyAllWindows()





3、识别视频中的人脸

3.1、导入人脸识别算法和视频

import numpy as np
import cv2
face_detect =cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')#人脸识别算法
cap = cv2.VideoCapture('./shipin.mp4')#导入视频

3.2、读取视频中的数据

flag, frame = cap.read()
  • 返回参数:
参数 说明
flag 返回值为True和False,True和图片一起返回,当读完视频后返回False
frame 接受返回来的图片

3.3、灰色处理

gray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)
  • 视频图片经过灰色处理后只有黑白两种颜色,像素的位置并不会改变,便于像素识别

3.4、人脸像素检测识别

  • 可以通过调节参数来调整像素的识别率
face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3)
  • 参数说明:
参数 说明
scaleFactor 检测像素点扩散的面积
minNeighbors 像素点邻近值

3.5、圈出人脸

for x, y, w, h in face_zone:
		#矩形
        cv2.rectangle(frame, pt1 = (x, y), pt2 = (x+w, y+h), color = [0,0,255], thickness=2)
        #圆形
        cv2.circle(frame, center = (x + w//2, y + h//2), radius = w//2, color = [0,255,0], thickness = 2)

图像处理之opencv识别图片和视频中人脸_第5张图片

3.6、设置视频展示频度

问题: 怎么设置视频的展示速度和原视频一致?

(1)视频的帧数

cap.get(propId = cv2.CAP_PROP_FPS)#结果等于25,意思是每秒25帧

(2)展示频率
图像处理之opencv识别图片和视频中人脸_第6张图片

3.7、源码汇总

import numpy as np
import cv2

#调用人脸识别算法
face_detect =cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture('./shipin.mp4')#加载视频

while True:
    flag, frame = cap.read()#读取视频片段
    if flag == False:
        break
    gray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)#灰色处理
    #识别人脸像素
    face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3)
    #圈出人脸位置
    for x, y, w, h in face_zone:
        cv2.rectangle(frame, pt1 = (x, y), pt2 = (x+w, y+h), color = [0,0,255], thickness=2)
        cv2.circle(frame, center = (x + w//2, y + h//2), radius = w//2, color = [0,255,0], thickness = 2)
    cv2.imshow('video', frame)
    #设置退出键和展示频率
    if ord('q') == cv2.waitKey(40):
        break
#释放资源    
cv2.destroyAllWindows()
cap.release()   


4、opencv识别电脑摄像头中的人脸

  • 识别电脑摄像头的流程和识别视频中的是一样的,只是加载源的方式不一样。
  • 当VideoCapture(0)时,自动调用摄像头捕捉视频。
import cv2
# 识别电脑摄像头,并打开
cap = cv2.VideoCapture(0)
while True:
    flag, frame = cap.read()
    if flag == False:
        break
    gray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)
    
    face_zone = face_detect.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
    for x, y, w, h in face_zone:
        cv2.rectangle(frame, pt1 = (x, y), pt2 = (x+w, y+h), color = [0,0,255], thickness=2)
        cv2.circle(frame, center = (x + w//2, y + h//2), radius = w//2, color = [0,255,0], thickness = 2)
    cv2.imshow('video', frame)
    if ord('q') == cv2.waitKey(40):
        break
cv2.destroyAllWindows()
cap.release()

图像处理之opencv识别图片和视频中人脸_第7张图片

你可能感兴趣的:(图像处理,人脸识别,opencv,计算机视觉,图像识别,python)