桂电七院opencv实验报告四

实验目的

(1)掌握OpenCV 3在图像处理中常用函数的使用。
(2)熟练操作Anaconda环境中Jupyter Notebook的使用。
(3)熟悉OpenCV中傅里叶变化的原理。

实验原理

(1)熟练掌握Anaconda环境的安装及其基本操作。
(2)理解Jupyter Notebook的工作原理。
(3)将上机程序调试通过,并能独立完成课堂练习题目。

实验内容与步骤

静态图像中的人脸检测
代码1

import cv2
def StaticDetect(filename):
    #创建一个级联分类器 加载一个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.
    face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
    
    #加载图像
    img = cv2.imread(filename)
    #转换为灰度图
    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #进行人脸检测,传入scaleFactor,minNegihbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及
    #每个人脸矩形保留近似数目的最小值
    #返回人脸矩形数组
    faces = face_cascade.detectMultiScale(gray_img,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('Face Detected!')
    cv2.imshow('Face Detected!',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
StaticDetect('people.jpg')

代码2

import cv2
def StaticDetect(filename):
    #创建一个级联分类器 加载一个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.
    face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
    
    #加载图像
    img = cv2.imread(filename)
    #转换为灰度图
    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #进行人脸检测,传入scaleFactor,minNegihbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及
    #每个人脸矩形保留近似数目的最小值
    #返回人脸矩形数组
    faces = face_cascade.detectMultiScale(gray_img,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('Face Detected!')
    cv2.imshow('Face Detected!',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
StaticDetect('timg.jpg')

视频中的人脸检测

def DynamicDetect():
    '''
    打开摄像头,读取帧,检测帧中的人脸,扫描检测到的人脸中的眼睛,对人脸绘制蓝色的矩形框,对人眼绘制绿色的矩形框
    '''
    #创建一个级联分类器 加载一个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.
    face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
    eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')
    
    #打开摄像头    
    camera = cv2.VideoCapture(0)
    cv2.namedWindow('Dynamic')
    
    while(True):
        #读取一帧图像
        ret,frame = camera.read()
        #判断图片读取成功?
        if ret:
            gray_img = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
            #人脸检测
            faces = face_cascade.detectMultiScale(gray_img,1.3,5)
            for (x,y,w,h) in faces:
                #在原图像上绘制矩形
                cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
                roi_gray = gray_img[y:y+h,x:x+w]
                #眼睛检测
                eyes = eye_cascade.detectMultiScale(roi_gray,1.03,5,0,(40,40))
                for (ex,ey,ew,eh) in eyes:
                    cv2.rectangle(frame,(ex+x,ey+y),(x+ex+ew,y+ey+eh),(0,255,0),2)
                    
            cv2.imshow('Dynamic',frame)            
            #如果按下q键则退出
            if cv2.waitKey(100) & 0xff == ord('q') :
                break
            
    camera.release()
    cv2.destroyAllWindows()
            

if __name__=='__main__':
    #filename = 'timg.jpg'
    #StaticDetect(filename)
    DynamicDetect()
上一篇:opencv图像预处理


下一篇:OpenCV 实现图像去阴影