python人脸检测
最近突然对图像识别有了点兴趣,便开始找一些识别的库,我这里采用的是python+opencv的方法,利用opencv内置的人脸检测库,可以比较方便快速地检测出人脸,学的很浅,也就图一乐。记录下来也只是为了以后便于回忆。
将图片转化为灰度图片
1 2 3 4 5 6 7 8
| import cv2 as cv img = cv.imread('testlca.jpg') cv.imshow('test', img) gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY) cv.imshow('gray', gray_img) cv.imwrite('testlca_gray.jpg', gray_img) cv.waitKey(0) cv.destroyAllWindows()
|
首先读取名叫testlca.jpg的图片,并且将它的命名为img,然后展示这个图片,再用opencv内置的函数,将这个图片转化为灰度图片,并且写入到testlca_gray.jpg文件,也展示这个图片。
一般处理图片,都需要先将其转化为灰度图片,然后再进行一系列的识别等步骤。
调整图片大小
1 2 3 4 5 6 7 8 9 10 11
| import cv2 as cv img = cv.imread('testlca.jpg') cv.imshow('test', img) resize_test = cv.resize(img, (200,200), fx=0.5, fy=0.5) cv.imshow('resize_test', resize_test)
while True: if ord('q') == cv.waitKey(0): break
cv.destroyAllWindows()
|
同样读取文件,这里将img图片进行了修改,将它转化为200*200像素的图片,并且也展示出来,还做了一个按键检测,当按下q的时候,图片才会关闭。
绘制图形
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import cv2 as cv img = cv.imread('testlca.jpg')
x,y,w,h = 100,100,100,100 cv.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2) cv.circle(img, (x+w//2,y+h//2), 50, (0,255,0), 2)
cv.imshow('img', img)
while True: if ord('q') == cv.waitKey(0): break
cv.destroyAllWindows()
|
这里定义并赋值了4个变量,并且在图片上打印了对应位置的矩形和圆形。
人脸检测
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import cv2 as cv def face_detect_demo(): gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) face_detector = cv.CascadeClassifier('E:/python/opencv/sources/data/haarcascades/haarcascade_eye.xml') face = face_detector.detectMultiScale(gray,1.9,5) for x, y, w, h in face: cv.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2) cv.imshow('result', img)
img = cv.imread('testlca.jpg') face_detect_demo()
while True: if ord('q') == cv.waitKey(0): break
cv.destroyAllWindows()
|
先定义了一个检测函数,这里非常简陋,也没做参数处理了,原理就是调用官方的人脸识别库识别出图片中的人脸,并且用矩形框显示出来。
其中face_detector.detectMultiScale这个函数中的第二个变量叫缩小比例,是影响效果的重要变量,要选取适当的变量值才可以正确的识别出所有人脸。