当前位置:   article > 正文

人脸识别(cv2库的实现)_cv2人脸识别

cv2人脸识别

1.人脸识别

首先,我已经讲过了cv2库的安装了,以及拓展的相关文件了

接下来咱们就开干吧~

  1. #导入cv2模块
  2. import cv2 as cv
  3. def face_detect_demo(img):
  4. gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
  5. face_detect=cv.CascadeClassifier("D:\BaiduNetdiskDownload\OPENCV(WIN)\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml")
  6. face=face_detect.detectMultiScale(gray)#限制,最小是100×100,最大是1000×1000
  7. for x,y,w,h in face:
  8. cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
  9. cv.imshow("result",img)
  10. #读取摄像头
  11. cap=cv.VideoCapture(0)
  12. #循环
  13. while True:
  14. flag,frame=cap.read()
  15. if not flag:
  16. break
  17. face_detect_demo(frame)
  18. if ord('q')==cv.waitKey(1):
  19. break
  20. #释放内存
  21. cv.destroyAllWindows(0)
  22. #释放摄像头
  23. cap.release()
  24. ''''#灰度转换
  25. gray_img=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
  26. #显示灰度
  27. cv.imshow("gray",gray_img)
  28. #显示照片
  29. cv.imshow("read_img",img)
  30. #保存灰度照片
  31. cv.imwrite("gray_face11.jpg",gray_img)
  32. #等待
  33. cv.waitKey(0)
  34. #释放内存
  35. cv.destroyAllWindows()
  36. '''

这是整体的代码

下面咱们细细道来:

对其中的函数属性做个解释:
创建一个VideoCapture对象,它的参数可以是设备索引或视频文件的名称。
有时候cap可能尚未初始化捕获,通过 cap.isOpened() 方法检查它是否已初始化。如果是True,那么确定。否则使用cap.open()打开它
cap.read() 返回布尔值(True/ False)。如果正确读取该帧,它将为True

cv2.imshow之后要跟cv2.waitkey,他们是一对好兄弟

cv2.waitKey(1000) & 0xFF == ord(‘q’) 是什么意思

先解释下字面意思:

  • cv2.waitKey(1000):在1000ms内根据键盘输入返回一个值
  • 0xFF :一个十六进制数
  • ord('q') :返回q的ascii码

0xFF是一个十六进制数,转换为二进制是11111111。waitKey返回值的范围为(0-255),刚好也是8个二进制位。那么我们将 cv2.waitKey(1) & 0xFF计算一下(不知怎么计算的可以百度位与运算)发现结果仍然是waitKey的返回值,那为何要多次一举呢?直接 cv2.waitKey(1) == ord('q')不就好了吗。

实际上在linux上使用waitkey有时会出现waitkey返回值超过了(0-255)的范围的现象。通过cv2.waitKey(1) & 0xFF运算,当waitkey返回值正常时 cv2.waitKey(1) = cv2.waitKey(1000) & 0xFF,当返回值不正常时,cv2.waitKey(1000) & 0xFF的范围仍不超过(0-255),就避免了一些奇奇怪怪的BUG。

2.人脸录入

  1. import cv2
  2. #摄像头
  3. cap=cv2.VideoCapture(0)
  4. flag=1
  5. num=1
  6. while(cap.isOpened()):#检测是否在开启状态
  7. ret_flag,Vshow=cap.read()#得到每帧图像
  8. cv2.imshow("Capture_Test",Vshow)#显示图像
  9. k=cv2.waitKey(1) &0xFF #按键判断
  10. if k==ord('s'):#保存
  11. cv2.imwrite(r"C:\Users\lenovo\Desktop\output/"+str(num)+".name"+".jpg",Vshow) #路径前面必须加一个r,否则会报错
  12. print("sucess to save",str(num)+".jpg")
  13. print("-----------")
  14. num+=1
  15. elif k==ord(' '):
  16. break
  17. cap.release()
  18. cv2.destroyAllWindows()

功能是从摄像头截取照片并进行保存到指定目录下,注意在路径前面要加一个r,要不然解析不出来路径,会报错

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/822321
推荐阅读
相关标签
  

闽ICP备14008679号