使用opencv实现读取图片以及摄像头,以及对图片,摄像头的实时检测人脸

#打开图像的方法
# import cv2
#
# filename='./photo/tupian.png'
# img=cv2.imread(filename,0)
# cv2.imshow('图片',img)
# cv2.waitKey(0)#等待时长  直到键盘值为key的响应之后
#
# cv2.destroyAllWindows()




# #python中用opencv打开摄像头的方法
# import cv2
#
# cap=cv2.VideoCapture(0)#参数为0 表示打开内置摄像头 后边数字为几表示打开第几个摄像头 一般为0
#
# success, frame=cap.read()#第一个参数为状态   后边为所要展示的每一帧的图像
#
# while success and cv2.waitKey(1)==-1:
#
#     cv2.imshow("Main Window", frame)
#
#     success, frame=cap.read()
#
# cap.release()   #释放cap对象
#
# cv2.destroyAllWindows()   #销毁窗口
#-----------------------------------检测图片人脸---------------------
# import cv2
# import os
# # os.chdir('/Users/wangchenxu/Downloads')
#
#
# # 待检测的图片路径
# imagepath="./photo/me.png"
#
# image = cv2.imread(imagepath)
# # image=cv2.resize(imagee,(900,900))
# # gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#
#
# '''
# # 获取人脸识别训练数据
# q
# 对于人脸特征的一些描述,opencv在读取完数据后很据训练中的样品数据,
# 就可以感知读取到的图片上的特征,进而对图片进行人脸识别。
# xml数据下载,
# 参考:https://github.com/opencv/opencv/tree/master/data/haarcascades
# '''
# #产生一个检测器
# face_cascade = cv2.CascadeClassifier(r'./haarcascades/haarcascade_frontalface_default.xml')
#
# # 探测人脸
# # 根据训练的数据来对新图片进行识别的过程。
# faces = face_cascade.detectMultiScale(
#   image,
#   scaleFactor = 1.15,#每次图片缩小的比例
#   minNeighbors = 5,#每次检测时,对检测点周边多少有效点同时进行检测,因为可能选取的监测点大小不一足而导致遗漏
#   minSize = (5,5),#检测点的最小值,或者说检测点的最终值
#   #flags = cv2.HAAR_SCALE_IMAGE
# )
#
# # 我们可以随意的指定里面参数的值,来达到不同精度下的识别。返回值就是opencv对图片的探测结果的体现。
#
# # 处理人脸探测的结果
# print ("发现{0}个人脸!".format(len(faces)))
# for(x,y,w,h) in faces:
#     cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)#用矩形做标记,参数分别为图像,矩形的左上坐标,右下坐标
#     # cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)
#
# cv2.imshow("image",image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()


#---------------------------实时检测人脸------------------------------
import cv2

cap=cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier(r'./haarcascades/haarcascade_frontalface_default.xml')

while(True):
    success,fram=cap.read()
    gray=cv2.cvtColor(fram,cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(
        gray,
        scaleFactor=1.15,  # 每次图片缩小的比例
        minNeighbors=5,  # 每次检测时,对检测点周边多少有效点同时进行检测,因为可能选取的监测点大小不一足而导致遗漏
        minSize=(5, 5),  # 检测点的最小值,或者说检测点的最终值
        # flags = cv2.HAAR_SCALE_IMAGE
    )
    print ("发现{0}个人脸!".format(len(faces)))
    for(x,y,w,h) in faces:
        cv2.rectangle(gray,(x,y),(x+w,y+w),(0,255,0),2)#用矩形做标记,参数分别为图像,矩形的左上坐标,右下坐标
        # cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)
    cv2.imshow('image',gray)

    if cv2.waitKey(1) & 0xFF==ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

#---------------------------录制视频--------------------                                               
cap=cv2.VideoCapture(0)                                                                            
#设置编码格式,并创建videowrite对象                                                                            
fourcc=cv2.VideoWriter_fourcc(*'XVID')       #编码方式 'MJPG' 'XVID'                                   
outfile=cv2.VideoWriter('luzhi.avi',fourcc,25.,(640,480))                                          
while(True):                                                                                       
    success,fram=cap.read()                                                                        
    # fram=cv2.flip(fram,1)  #3个参数  0为垂直翻转  1为水平翻转   -1为垂直水平翻转                                     
    font=cv2.FONT_HERSHEY_SIMPLEX#往摄像头中添加字体                                                        
    cv2.putText(fram,'lalala',(10,500),font,4,(255,192,203),10)  #参数分别为文件、想添加的内容、位置、字体,字体大小,颜色、字体粗细
    #写入文件                                                                                          
    outfile.write(fram)                                                                            
    cv2.imshow('fram',fram)                                                                        
    if cv2.waitKey(1) == ord('q'):                                                                 
        break                                                                                      
cap.release()                                                                                      
cv2.destroyAllWindows()                                                                            






你可能感兴趣的:(使用opencv实现读取图片以及摄像头,以及对图片,摄像头的实时检测人脸)