文章目录
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()
cv2.namedWindow("camera", 0)
用来手动调节图片窗口的大小
1.2、识别人脸
1.2.1、下载人脸识别算法
- 自己写人脸识别的算法是不可能的,但我们可以直接到github上下载大神写好的人脸识别算法。
- 人脸识别算法链接:https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
- 如果不能下载的话,可以把它的源代码复制下来放在
.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()
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()
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()
来源:CSDN
作者:阿优乐扬
链接:https://blog.csdn.net/ayouleyang/article/details/104091979