• 实现人脸识别性别之路---opencv


    import cv2
    from make_imge import get_file_name
    from train_ph import Model
    import os

    IMAGE_SIZE = 128
    if __name__=="__main__":
    name = get_file_name("E:\gender_image")
    model = Model()
    model.load()
    facecas = cv2.CascadeClassifier("C:\myword\haarcascade_frontalface_default.xml")
    cap = cv2.VideoCapture(0)
    while cap.isOpened():
    ret,frame = cap.read()
    if not ret:
    break
    gray = cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)
    faces = facecas.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=3,minSize=(32,32))
    if len(faces)>0:
    for face in faces:
    x,y,w,h = face
    cv2.rectangle(frame,(x-10,y-10),(x+w-10,y+h-10),(0,0,255),2)
              img =frame[x-10:x+w-10,y-10:y+h-10]

    cv2.imwrite("E:\photo\"+str(i)+".jpg",img)

    cv2.imshow("face_photo",frame)
    k = cv2.waitKey(10)
    if k == ord("q"):
    break

    cap.release()
    cv2.destroyAllWindows()



    思路整理:

    写一个截取图片的代码为:

    1、创建一个识别人脸的对象

    2、创建一个摄像头的对象

    3、使用while语句,表示可以读取很多张图片

    4、判断摄像头是否初始化正确,利用read函数返回的ret布尔值进行判断

    5、这里将图片变为灰度值

    6、判断正确,通过detectMuitleScale函数把人脸的信息取下来。使用的是灰度值的图片

    7、判断是否截取到图片

    8、截取到图片,就将图片的位置信息读取出来。图片是数字信息,每个图片信息都放在列表中

    9、可以在人脸的地方画一个矩形,根据知道矩形的对角点就可以画图像。(这里的图象是原图,没有进行灰度值转化的)

    10、因为我想要将人脸的这一部分图像截取下来,因此这里我通过人脸坐标截取人脸

    11、然后我将每一帧的图片显示出来

    12、如果我不想再显示图像的时候,我可以按q结束

    13、结束之后,我们就将摄像头对象释放然后销毁所有的窗口

     

    其中每个参数代表的含义:

     

    cv2.CascadeClassifier看参数、用法

     

    Cv2级联分类器:用于检测数字图像的特征

     

    参数:用一个xm文件说明要检测图像特征的某一个部分,用xml文件的地址为参数。检测人脸比较好的参数有:haarcascade_frontalface_alt.xml

     

     

     

     cv2.VideoCapture看参数、用法、表示的意义、返回值

     

    视频捕获器:是opencv的一个类、利用摄像头捕获图像

     

    参数:可以是:相机的索引值(0:表示打开本地摄像机、1:标售打开别的摄像机);也可以是视频文件的地址

     

    用法:调用摄像头的时候

     

    返回值:布尔值

     

    注意Cap是cv2.VideoCapture返回的类

     

    Cap.isOpen():表示是否已经初始化摄像头

     

     

     

    Cap.read():用法、意义、返回值

     

    返回值:返回两个值:1、ret(布尔值,用来表示读取帧是否成功)2、frame一个三维矩阵(图像的数字信息)

     

    用法:ret可以用来判断图片是否读取成功,frame每一帧图片的矩阵

     

     

     

    Face_casade.detectMultilScal():参数的意义、用法、返回值

     

    detectMultilScal为人脸识别器:单单识别人脸

     

    参数:gray,也就是说图片是灰度的,这样比较快速

     

         scaleFacetor:默认值为1.1

     

         minNeighbors:默认值为3.表示联集最小为3,至少有3次重叠检测,我们才认为人脸确实存

     

    Minsize:最小区域

     

    返回值:得到以人脸特征的数字矩阵的列表

     

     

     

    能打开摄像头的函数为:cv2.imshow():参数、意义、用法

     

    1、图像宽的名字和每一帧的名字(注意单独的他是不能把摄像头调用出来的,因为它显示的是每一帧的图片,只是因为读取一帧的速度很快而已,速度给了我们错觉)

     

     

     

     

     

    Cv2.waitkey(delay)函数:参数、作用

     

    作用:不断刷新图像,频率时间为delay,单位为ms

     

    参数:当参数为整数并且大于零是,表示停留多长时间.但参数为0是,表示只显示一帧

     

     



  • 相关阅读:
    暑假集训(2)第六弹 ----- Frosh Week(UVA11858)
    暑假集训(2)第五弹 ----- Who's in the Middle(poj2388)
    暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)
    暑假集训(2)第三弹 ----- 食物链(poj1182)
    排序算法
    设计模式
    字符串匹配之KMP实现
    栈的链表简易实现
    单链表简单实现
    EF使用Effort.EF内存数据库单元测试和集成测试
  • 原文地址:https://www.cnblogs.com/MyUniverse/p/9495462.html
Copyright © 2020-2023  润新知