1. 程式人生 > 其它 >opencv學習筆記(3)——視訊的處理

opencv學習筆記(3)——視訊的處理

讀取電腦檔案中的視訊的方法:

reba1 = cv2.VideoCapture('C:\\Users\\shm\\Desktop\\python_data\\video_data\\reba1.mp4')

顯示第一幀

flag,frame = reba1.read()#返回一幀的圖片和讀取下一幀的結果:T/F
print(flag,frame.shape)
#輸出結果:True (960, 544, 3)


cv2.imshow('reba',frame)
cv2.waitKey(0)
cv2.destroyAllWindows()

播放視訊

while reba1.isOpened():
    flag,frame = reba1.read()    
    if flag == False:
        break
    cv2.imshow('reba',frame)

    if ord('q') == cv2.waitKey(29):
        break
cv2.destroyAllWindows()

獲取視訊每秒幀數

reba1.get(propId = cv2.CAP_PROP_FPS)#獲取每秒幀數

CAP_PROP_FRAME_COUNT獲取總幀數
CAP_PROP_HEIGHT每一幀的高度,WIDTH寬度
FOURCC編碼格式

人臉識別:用for迴圈對每一幀執行一遍唄

#人臉識別最好轉換成黑白的再處理,速度更快
detector = cv2.CascadeClassifier('C:\\Users\\shm\\Desktop\\python_code\\opencv_classifier\\haarcascade_frontalface_default.xml')#分類器
while reba1.isOpened():
    flag,frame = reba1.read()
    
    gray = cv2.cvtColor(frame, code = cv2.COLOR_BGR2GRAY)

    face_zone = detector.detectMultiScale(gray,scaleFactor = 1.2,minNeighbors = 10)
    for x,y,w,h in face_zone:
        cv2.rectangle(frame,pt1 = (x,y),pt2 = (x+w,y+h),color = [0,0,255],thickness = 2)#畫一個正方形框框
    if flag == False:
        break
    cv2.imshow('reba',frame)
    if ord('q') == cv2.waitKey(29):
        break
cv2.destroyAllWindows()

調取本地攝像頭,把上面的路徑改成0就行

capture = cv2.VideoCapture(0)
detector = cv2.CascadeClassifier('C:\\Users\\shm\\Desktop\\python_code\\opencv_classifier\\haarcascade_frontalface_default.xml')#分類器
while capture.isOpened():
    flag,frame = capture.read()
    
    gray = cv2.cvtColor(frame, code = 6)

    face_zone = detector.detectMultiScale(gray,scaleFactor = 1.5,minNeighbors = 10)
    for x,y,w,h in face_zone:
        cv2.rectangle(frame,pt1 = (x,y),pt2 = (x+w,y+h),color = [0,0,255],thickness = 2)#畫一個正方形框框
    if flag == False:
        break
    cv2.imshow('reba',frame)
    if ord('q') == cv2.waitKey(0):
        break
cv2.destroyAllWindows()
#重複上面提取人臉程式碼

儲存視訊

#儲存一下上面熱巴提取人臉之後的視訊
w = int(reba1.get(cv2.CAP_PROP_FRAME_WIDTH))#獲取視訊幀寬高
h = int(reba1.get(cv2.CAP_PROP_FRAME_HEIGHT))

video_writer = cv2.VideoWriter('C:\\Users\\shm\\Desktop\\python_data\\video_data\\reba2.avi',cv2.VideoWriter_fourcc('M','P','4','2'),24,(w,h))#四個引數,檔名、視訊編碼、fps、視訊幀尺寸
#視訊編碼:cv2.VideoWriter_fourcc('M','P','4','2')為常用格式記住就行
#注意得儲存成avi檔案,如果是mp4無法儲存

#把熱巴提取過人臉的視訊存起來
detector = cv2.CascadeClassifier('C:\\Users\\shm\\Desktop\\python_code\\opencv_classifier\\haarcascade_frontalface_default.xml')#分類器
while reba1.isOpened():
    
    flag,frame = reba1.read()
    if flag == False:
        break
    gray = cv2.cvtColor(frame, code = 6)

    face_zone = detector.detectMultiScale(gray,scaleFactor = 1.5,minNeighbors = 10)
    for x,y,w,h in face_zone:
        cv2.rectangle(frame,pt1 = (x,y),pt2 = (x+w,y+h),color = [0,0,255],thickness = 2)#畫一個正方形框框
    video_writer.write(frame)
    if flag == False:
        break
    cv2.imshow('reba',frame)
    if ord('q') == cv2.waitKey(29):
        break
cv2.destroyAllWindows()
reba1.release()
video_writer.release()