Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Làm việc với Video trong OpenCV bằng Python
OpenCV là một thư viện mạnh mẽ, được ứng dụng trong nhiều lĩnh vực liên quan đến video như: điều khiển drone, robot, định vị và điều hướng xe, camera giám sát, theo dõi video, và các hệ thống nhúng như Arduino hay Raspberry Pi.
Video thực chất là một chuỗi các khung hình (frame) được hiển thị liên tục với tốc độ tính bằng khung hình mỗi giây (fps). Bài viết này sẽ hướng dẫn bạn cách:
- Đọc video từ file hoặc webcam.
- Hiển thị từng khung hình.
- Lưu video vào file.
Dưới đây là video mẫu từ Kaggle.
Đọc video trong OpenCV trong Python
Có hai cách để đọc video: từ file hoặc từ webcam. OpenCV cung cấp đối tượng VideoCapture
để thực hiện việc này.
Bài viết này được đăng tại [free tuts .net]
Cú pháp:
cv2.VideoCapture(filename)
filename
: Tên file video (nếu file nằm cùng thư mục với chương trình) hoặc đường dẫn đầy đủ (nếu file ở thư mục khác).
Ví dụ: Đọc video từ file
import cv2 # Đọc video từ file cap = cv2.VideoCapture('Flyover.mp4') while cap.isOpened(): # Đọc từng khung hình ret, frame = cap.read() if ret: # Hiển thị khung hình cv2.imshow('Frame', frame) # Nhấn phím 'q' để thoát if cv2.waitKey(25) & 0xFF == ord('q'): break else: break # Giải phóng đối tượng cap.release() cv2.destroyAllWindows()
Giải thích:
cap.isOpened()
: Kiểm tra xem video đã được mở thành công hay chưa, trả về True/False.
cap.read()
: Đọc từng khung hình, trả về một tuple:
ret
: Giá trị boolean, xác nhận khung hình có đọc được không.frame
: Khung hình hiện tại.
cv2.imshow()
: Hiển thị khung hình trong một cửa sổ.
cv2.waitKey()
: Dừng hiển thị trong khoảng thời gian nhất định (đơn vị: ms). Trong ví dụ trên, nhấn phím q
để thoát.
cap.release()
: Giải phóng bộ nhớ và đóng đối tượng video.
Truy cập thuộc tính video
Sử dụng cap.get(propId)
để lấy thông tin về video:
propId
: Thuộc tính video (ví dụ: chiều rộng, chiều cao, số khung hình mỗi giây).
Một số thuộc tính thông dụng:
cap.get(3)
: Chiều rộng (width).cap.get(4)
: Chiều cao (height).cap.get(5)
: Tốc độ khung hình (fps).
Ngoài ra, bạn có thể thay đổi giá trị bằng cap.set(propId, value)
.
Đọc video từ webcam
Sử dụng cv2.VideoCapture(0)
để đọc video từ camera đầu tiên. Thay 0
bằng 1
để chọn camera khác.
Ghi video trong OpenCV trong Python
OpenCV cung cấp đối tượng VideoWriter
để lưu video vào file .
Cú pháp:
cv2.VideoWriter(Filename, Fourcc_code, FrameRate, FrameSize)
Filename
: Tên file video đầu ra.Fourcc_code
: Mã nén video (4-byte code). Ví dụ:cv2.VideoWriter_fourcc(*'XVID')
.FrameRate
: Tốc độ khung hình (fps).FrameSize
: Kích thước khung hình (rộng, cao).
Ví dụ: Ghi video
import cv2 # Đọc video từ file cap = cv2.VideoCapture('Flyover.mp4') # Khởi tạo VideoWriter fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('Output.mp4', fourcc, 10.0, (1280, 720)) while cap.isOpened(): ret, frame = cap.read() if ret: # Ghi từng khung hình vào file out.write(frame) # Hiển thị khung hình cv2.imshow('Frame', frame) if cv2.waitKey(25) & 0xFF == ord('q'): break else: break # Giải phóng đối tượng cap.release() out.release() cv2.destroyAllWindows()