目录
一、安装opencv-python
二、准备分类器
三、代码讲解
四、运行结果
附录:
总结
这里推荐使用pycharm直接安装opencv-python
打开文件——设置——python解释器——点击+号
搜索opencv-python,点击安装包,等待片刻即可安装好
检查是否安装好,新建一个项目输入以下代码,若无报错则安装好
import cv2
咱们使用opencv官方提供的分类器,包括面部识别,侧脸识别,眼睛识别等,如果想训练自己的分类器可以看我另外一篇文章。
我下载好的三个分类器,老铁们自取
链接:https://pan.baidu.com/s/1TqunSL6ne0dXW5TyO7DGWw
提取码:9420
准备好以上工作,开始进行操作过程
import cv2
camera = cv2.VideoCapture(0)
face_casecade = cv2.CascadeClassifier(r'C:\Users\Gaomagic\PycharmProjects\kouzhaodetect\mask\xml\cascade.xml')
导入cv2包。
cv2.VideoCapture(0)打开摄像头,0表示笔记本内置摄像头
cv2.CascadeClassifier()加载分类器,括号里面写入刚才下载的分类器的路径,注意:要英文路径,且前面加上r,否则\表示转义符号。
while (True):
ret, frame = camera.read()
进入一个while循环,camera.read()读取一帧图像,frame为读取到的图片,ret为bool变量要么true,要么flase,当读取到图像则为true
if ret:
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face = face_casecade.detectMultiScale(gray_img, 1.3, 2)
ret为true时进入if判断,cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)表示把读取到的一帧图片frame转换为灰度图。face=face_casecade.detectMultiScale()第一个参数是转换完的灰度图。第二个参数是每次缩小图像的比例,默认1:1。第三个参数是匹配成功所需要的周围矩形框的数目,每一个特征匹配到的区域都是一个矩形框,只有多个矩形框同时存在时,才认为是匹配成功,比如人脸,这个默认值是3。
for (x, y, w, h) in face:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
print("(x:",(x+w)/2,",y:",(y+h)/2,")")
cv2.imshow("camera",frame);
进入for循环,cv2.rectangle()在图上绘制矩形,第一个参数为读取到的图片,第二个参数为左上点的坐标,第二个参数是右下点的坐标,第三个参数是RGB值,第四个参数是矩形边框厚度。
cv2.imshow("camera",frame)将画面展示出来。
if cv2.waitKey(1) & 0xff == ord('q'):
break
如果键盘输入q则退出死循环,ord()是吧q转换为ASCALL码
camera.release()
cv2.destroyAllWindows()
关闭窗口和摄像头
import cv2
camera = cv2.VideoCapture(0)
face_casecade = cv2.CascadeClassifier(r'C:\Users\Gaomagic\PycharmProjects\kouzhaodetect\mask\xml\cascade.xml')
while (True):
ret, frame = camera.read()
if ret:
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face = face_casecade.detectMultiScale(gray_img, 1.3, 2)
for (x, y, w, h) in face:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
print("(x:",(x+w)/2,",y:",(y+h)/2,")")
cv2.imshow("camera",frame);
if cv2.waitKey(1) & 0xff == ord('q'):
break
camera.release()
cv2.destroyAllWindows()
新人博主,若有错误之处请指出。