opencv學習筆記(3)——視訊的處理
阿新 • • 發佈:2020-12-22
讀取電腦檔案中的視訊的方法:
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()