额,实属兴趣学的一个项目,之后就是全部过程。
这个项目运用的是python中的一个opencv模块。
1. 先看看读取图片:
import cv2 as cv
# 进行对图片的读取
image = cv.imread('图片路径')
# 显示图片,第一个参数可自定义(目前认为是一个别称),第二个参数即使读取的图片
cv.imshow('detect',image)
# waitKey,这个函数是对图片显示时间的一个设置,如果不设置图片将会一闪而过,若参数设为0,表示一直显示(此时按键盘中任意键即可退出),还有一件事,函数里的参数是以毫秒为单位(即3000为3秒)
cv.waitKey(0)
# destroyAllWindows函数是退出后清除图片的显示,当然也可以不写
cv.destroyAllWindows()
2. 对图片进行灰度转换:
import cv2 as cv
image = cv.imread('图片路径')
# 灰度转换,opencv采用的是三原色的一个原理,即为BGR(Bule,Green,Red),此处置为灰(COLOR_BGR2GRAY)
gray_img = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
cv.imshow('gray',gray_img)
cv.waitKey(0)
cv.destroyAllWindows()
3. 标注绘图(在进行识别过程中会有标注的一个操作):
import cv2 as cv
image = cv.imread('图片路径')
# 绘制矩形 第二个参数是坐标及长宽,第三个参数表示颜色(线条),thickness表示线条的粗细
x,y,w,h = 100,100,30,30
rectangle = cv.rectangle(image,(x,y,x+w,y+h),color=(0,0,255)) # 色彩--->BGR
cv.imshow('rectangle',rectangle)
# 绘制圆形 第二个参数是圆心,第三个参数是半径,第四个参数表示颜色(线条),thickness表示线条粗细
circle = cv.circle(image,center=(100,100),radius=30,color=(0,0,255))
cv.imshow('circle',circle)
cv.waitKey(0)
cv.destroyAllWindows()
4. 开始识别并标记(单个人):
这里需要去下载检测的一个库,然后去调用就可以进行检测了。
下载地址:https://opencv.org
import cv2 as cv
def face_detect_demo():
# 转换灰度
gray_img = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
# 加载特征数据(参数即使调用opencv中的xml文件)
face = cv.CascadeClassifier('***.../opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
# 检测(根据上面加载出来的特征进行检测)
faces = face.detectMultiScale(gray_img)
# 检测出来的结果会返回坐标即长和宽
for x,y,w,h in faces:
# 用矩形去标记
rectangle = cv.rectangle(image,(x,y,x+w,y+h),color=(0,0,255),thickness=2)
cv.imshow('detect',image)
image = cv.imread('图片路径')
# 进行人脸检测
face_detect_demo()
cv.waitKey(0)
cv.destroyAllWindows()