自己的opencv是使用Anaconda配置的,自己学习不久,有错多指教,开始写博客是因为发现以前一些单片机的程序做过后会忘记,写博客感觉可以记录下来,主要是能记录一些注意的地方。
个人邮箱:1974046360@qq.com
使用opencv版本为:4.1.2 和 Spyder(python3.7)
使用的是GitHub中训练好的库。
程序截图:
**1.**首先我们需要有一个人脸检测的XML文件,这个文件夹能够帮助我们检测静态图像、视频、摄像头中所得到的人脸,好用,想多了解可以去了解一下Haar级联的概念。
**2.**程序流程:
导入需要检测的图片
定义detect函数,自带声明了face_cascade变量,负责人脸检测
传入图片
对图片进行二值化处理
使用face_cascade.detectMultiScale()进行人脸检测
在导入的图片上用矩形将人脸框出来
使用cv2.namedWindow() 创建一个显示窗口
展示图片
实际操作
**第一步:**详细讲一下文件下载和保存吧,自己在这里吃了亏
去GitHub中下载所需要的人脸检测XML文件,以下有网站,在网站找到相关文件,将它保存下来(这里提醒一下,一开始我以为一定要保存在opencv源代码副本的文件夹中,其实可以不用。我的opencv是使用Anaconda配置用,我找不到源代码副本的文件,这里我摸了一晚上没弄好,睡觉时就想到直接新建一个文件夹然后再导入程序中)。
Github文件网址:https://github.com/opencv/opencv/tree/master/data/haarcascades
找到文件:haarcascade_profileface.xml;点击进去。
点击Raw进入页面,然后Ctrl+s保存。
我是在C盘找到Spyder-py3,创建一个名为cascades的文件夹保存,如:C:\Users\Seven four seven.spyder-py3\cascades
**第二步:**直接猛搞程序
import cv2 #导入opencv
imgname = r"C:\Users\Seven four seven\Desktop\spyder tu\xiemou.jpg" #添加识别的图片的地址
def detect(imgname): #定义detect函数
face_cascade = cv2.CascadeClassifier(r"C:\Users\Seven four seven\.spyder-py3\cascades\haarcascade_frontalface_default.xml")
#从文件夹导入人脸检测的XML文件,最好是绝对路径不易报错
img = cv2.imread(imgname) #imread传入需要识别的图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将图片进行二值化处理
faces = face_cascade.detectMultiScale(gray,1.3,5) #使用函数进行人脸识别,并返回参数值
#遍历结果,并在原有图片上将人脸使用矩形框出来
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.namedWindow('Vikings Detected!!',cv2.WINDOW_FREERATIO) #创建一个显示窗口,下文有介绍
cv2.imshow('Vikings Detected!!',img) #展示图片
cv2.waitKey(0)
#cv2.imwrite('jieguo.jpg',img) #将绘制出人脸的图片进行保存
detect(imgname)
传入的图片:
识别后的图片:
展示的图片可以进行拖动显示窗大小,还挺搞笑:
最后备注一下创建一个显示窗口的函数:
"
函数:void nameWindow() ;
参数1:新建的窗口的名称。自己随便取。
参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE 。
WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。()
WINDOW_NORMAL 用户可以改变这个窗口大小()
WINDOW_OPENGL 窗口创建的时候会支持OpenGL
用法: cv2.namedWindow(‘img’,cv2.WINDOW_FREERATIO)
"