Advertisement

OpenCv+cascade 进行图像识别——python

阅读量:

1.传入XML文件建立模型

复制代码
    import cv2
    
    face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")

2.载入图片

传入为BGR图,转为Grey图后进行识别;

复制代码
    #识别模型
    img = cv2.imread("photo.jpg")  #不传入参数 默认1
    grey_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    #将BGR转为gray
    
    #cascade XML model

3.参数

得到的face为numpyarray,为监测到的左上角坐标与宽高参数;

复制代码
    #numpy_array
    faces = face_cascade.detectMultiScale(grey_img,
    scaleFactor=1.05,#每次放大1.05去找更大的face  越接近1,每次寻找约精确
    minNeighbors=5)  #每次找5个neighbor

4.在图像上画出方框

cv2.rectangle(img,顶点1(,),顶点2(,),颜色,宽度)

复制代码
    #print(faces)  #给出左上角的点坐标,以及长款
    
    for x,y,w,h in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)    #rectangle(图像,(左上角x,左上角y),(右下角x,右下角y),(B,G,R),矩形宽度)
    
    resized=cv2.resize(img,(int(img.shape[1]/2),int(img.shape[0]/2)))

5.显示图像or保存图像

复制代码
    #cv2.imshow("Gray",grey_img)
    cv2.imshow("face",resized)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

完整代码

复制代码
    import cv2
    
    face_cascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
    
    #识别模型
    img = cv2.imread("photo.jpg")  #不传入参数 默认1
    grey_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    #将BGR转为gray
    
    #cascade XML model
    
    
    #numpy_array
    faces = face_cascade.detectMultiScale(grey_img,
    scaleFactor=1.05,#每次放大1.05去找更大的face  越接近1,每次寻找约精确
    minNeighbors=5)  #每次找5个neighbor
    
    
    #print(faces)  #给出左上角的点坐标,以及长款
    
    for x,y,w,h in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)    #rectangle(图像,(左上角x,左上角y),(右下角x,右下角y),(B,G,R),矩形宽度)
    
    resized=cv2.resize(img,(int(img.shape[1]/2),int(img.shape[0]/2)))
    
    #cv2.imshow("Gray",grey_img)
    cv2.imshow("face",resized)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

OpenCv对摄像头进行实时获取

1.控制摄像头
0为摄像头编号;

复制代码
    import cv2,time  #加入time  延时camera
    
    video=cv2.VideoCapture(0)  #number 表示camera 

通过check变量可以获取摄像头运行状态,当其值为true时表明正在捕获画面。
视频对象read()方法获取的是当前捕获的画面。
其中frame变量存储的是一个OpenCV中的BGR像素数组。
惯用语转换:将BGR图像转换为灰度图像。
显示操作:通过imshow函数显示图像。
刷新频率:设置waitKey=1ms使得每毫秒更新一次画面。

if key == ord(‘q’)
若按q则退出循环;

复制代码
    while True:
    check, frame = video.read()  #最开始的一帧
    
    print(check)
    print(frame)
    
    
    #time.sleep(3)
    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #把frame变为灰度图
    cv2.imshow("capturing",gray)
    key=cv2.waitKey(1)  #每个n ms 换图 
    #先wait 再release 
    #用while循环实现对视频的捕捉
    if key == ord('q'):  #输入q则退出
        break 

3.结束捕捉
释放摄像头;
关闭图片窗口;

复制代码
    video.release()     
    
    cv2.destroyAllWindows()

全部评论 (0)

还没有任何评论哟~