OpenCV

Sử Dụng VideoCapture Trong OpenCV

Thông thường khi làm việc với OpenCV, đầu vào của chúng ta là hình ảnh hoặc các tập hình ảnh. Vậy làm sao chúng ta có thể lấy được các frame video thông qua camera  hay đọc frame từ file Video chẳng hạn. Khá hay là thư viện OpenCV có cung cấp cho chúng ta một class là  VideoCapture có chức năng capturing video từ camera hay đọc video từ file video hay từ một tập các hình ảnh.

Giới thiệu

Thông thường khi làm việc với OpenCV, đầu vào của chúng ta là hình ảnh hoặc các tập hình ảnh. Vậy làm sao chúng ta có thể lấy được các frame video thông qua camera  hay đọc frame từ file Video chẳng hạn. Khá hay là thư viện OpenCV có cung cấp cho chúng ta một class là  VideoCapture có chức năng capturing video từ camera hay đọc video từ file video hay từ một tập các hình ảnh.

Ngoài ra mình cũng giới thiệu thêm cho các bạn một thư viện xử lý video khá đồ sộ được mọi người sử đụng rất nhiều là FFMPEG.

Bạn có thể tìm hiểu nó thông qua trang chủ: https://ffmpeg.org/

Lấy Video Frame từ camera với Video Capture

Các bước làm việc với VideoCapture trong OpenCV

Bước 1: Khởi tạo đối tượng VideoCapture và mở camera với tham số truyền vào là flags với các giá trị dưới đây, được define trong OpenCV

Nếu máy bạn có 1 camera thì hãy truyền vào 0 để OpenCV tự detect và mở đúng camera đó.

Bước 2: Kiểm tra đã mở camera thành công hay chưa thông qua phương thức isOpen.

Bước3: Nếu mở video thành công thì dùng vòng lặp vô tận để lấy video frame từ camera thông qua phương thức read() để nhận video video frame thông qua thể hiện của class Mat (cấu trúc dữ liệu lưu trữ data của hình ảnh). Từ Video Framen này chúng ta có thể áp dụng các thuật toán để xử lý theo ý muốn.

Bước 4. Kết thúc chương trình.

Đọc Video từ file với VideoCapture

Cũng giống với việc lấy video frame từ camera nhưng với cách đọc video frame chúng ta truyền đối số vào phương thức open là tên của file video.

Các phương thức lấy ra các thuộc tính của Video Frame

Phương thứ get của VideoCapture cho chúng ta lấy ra các thuộc tính của video frame.

Với propID là các giá trị dưới đây, mình sẽ để nguyên bản tiếng Anh mà không dịch ra tiếng Việt

Property identifier. It can be one of the following:

  • CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds or video capture timestamp.
  • CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
  • CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 – start of the film, 1 – end of the film.
  • CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
  • CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
  • CV_CAP_PROP_FPS Frame rate.
  • CV_CAP_PROP_FOURCC 4-character code of codec.
  • CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
  • CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .
  • CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
  • CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
  • CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
  • CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
  • CV_CAP_PROP_HUE Hue of the image (only for cameras).
  • CV_CAP_PROP_GAIN Gain of the image (only for cameras).
  • CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
  • CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
  • CV_CAP_PROP_WHITE_BALANCE_U The U value of the whitebalance setting (note: only supported by DC1394 v 2.x backend currently)
  • CV_CAP_PROP_WHITE_BALANCE_V The V value of the whitebalance setting (note: only supported by DC1394 v 2.x backend currently)
  • CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)
  • CV_CAP_PROP_ISO_SPEED The ISO speed of the camera (note: only supported by DC1394 v 2.x backend currently)
  • CV_CAP_PROP_BUFFERSIZE Amount of frames stored in internal buffer memory (note: only supported by DC1394 v 2.x backend currently)

Mình thư viết lại chương trình trên như sau:

Và một đoạn log xuất ra như dưới đây:

9 thoughts on “Sử Dụng VideoCapture Trong OpenCV”

  1. Anh ơi, cho em hỏi là tại sao e để “int argc, const char * argv[]” thì nó không chạy, còn nếu để main() thí mới chạy , và ở 2 chương trình sau thì có chạy mà không thể hiển thị kết quả vì nó hiển thị rồi tắt luôn, không xem được kết quả ạ ?

  2. anh oi, neu dang extract frame tu stream ma disconnect internet thi lam ntn de khi connect lai internet thi ta tiep tuc extract phan dang lam do truoc do a?

  3. Anh ơi, em muốn hỏi là nếu dùng camera Asus Xtion PRO và Orbbec Astra thì cần nhập tham số truyền là gì ạ. Cả hai đều chạy với driver OPENNI2 nhưng khi nhập theo trên thì vẫn chưa kết nối đc ạ!

  4. làm ơn cho mình hỏi IllegalStateException cách khắc phục thế nào vậy, mình tự học kiến thức còn hạn chế , chỉ giúp nghe .cám ơn

  5. anh ơi cho em hỏi anh khai báo các biến: int argc, const char * argv[] này để làm gì ạ tại em thấy nó không có dùng trong chương trình

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.